正常的“SelectWhere”用法如下:
dt<<SelectWhere(:ExampleColumnName > 5);
这很好用。 我遇到的困难是当我需要更灵活地选择“:ExampleColumnName”时。
例如,如果我在拟合模型中保存新的 Studentized Residuals 列,它将创建一个名为“Studentized Resid Log(CFU/mL) By Condition”的列。 假设我想选择高于 3 或低于 -3 的任何值。 由于该列的名称,我需要使用:
dt<<SelectWhere(:Name("Studentized Resid Log(CFU/mL) By Condition")<-3 | :Name("Studentized Resid Log(CFU/mL) By Condition")>3);大多数时候这都很好,但并非总是如此。 必须在 :Name() 中完全写出字符串并不是很理想 - 例如,如果计划使一个函数可用于各种拟合模型,每个拟合模型将产生不同的 Studentized Residual 列名称,那么它是不理想的为每个可能的模型编写唯一的“SelectWhere”效率不高(特别是如果您不能总是预测用户将选择什么模型)。
我想要的工作是以下一项/两项:
//Option 1
colName = ""Studentized Resid Log(CFU/mL) By Condition";
dt<<SelectWhere(:Name(colName)<-3 | ::Name(colName)>3);
//Option 2
colRef = Column(dt, colName);
dt<<SelectWhere( colRef <-3 | colRef >3 );
当运行 SelectWhere 函数时,选项 1 返回“名称参数必须是带引号的字符串”错误。 似乎 :Name() 需要一个完全写出的字符串,并且对一个字符串的引用是不可接受的。
选项 2 不返回任何错误,但不会选择任何内容。 SelectWhere 似乎没有像显式键入“:XXXX”引用那样对待列引用变量。
我当前的解决方法不是很好:在 Fit Model 创建新列后,将表上的最后一列重命名为简单且唯一的名称(例如“StdResid”),可以直接在 SelectWhere 的“正常用法”中使用(例如,“ :标准残留”)。
我是否错过了一些明显的东西,可以让我的生活更轻松?
另外,有什么方法可以让选项 1 和/或选项 2 发挥作用吗?