将变量值引用为rxDataStepXdf函数中rowSelection参数的列

时间:2015-02-26 09:54:02

标签: r revolution-r

我已经指定了一个变量来获取数据集的列名,例如:

column_name <- "run_type"

使用rxDataStepXdf函数,我想过滤我的数据集,只选择run_type = "Prime"的行:

rxDataStepXdf(inFile=datasetXDFPath, outFile=outputXDFPath,rowSelection=(run_type=="Prime"))

但是,我不需要显式指定要过滤的列,而是需要传递变量column_name:

rxDataStepXdf(inFile=datasetXDFPath,outFile=outputXDFPath,rowSelection=(column_name=="Prime"))

这不起作用,因为我猜测该函数搜索名称为&#34; column_name&#34;的列。代替。我尝试过以下几种方式,而且所有这些方法都不适合我:

rxDataStepXdf(inFile=datasetXDFPath,outFile=outputXDFPath,rowSelection=(quote(column_name)=="Prime"))

rxDataStepXdf(inFile=datasetXDFPath,outFile=outputXDFPath,rowSelection=(get("column_name")=="Prime"))

rxDataStepXdf(inFile=datasetXDFPath,outFile=outputXDFPath,rowSelection=(eval(column_name)=="Prime"))

rxDataStepXdf(inFile=datasetXDFPath,outFile=outputXDFPath,rowSelection=(eval(parse(text="column_name"))=="PRIME"))

如何将column_name的值传递给rowSelection参数?

1 个答案:

答案 0 :(得分:1)

您可以在调用rxDataStep之外创建表达式,这样可以更容易阅读。然后,一个选项是使用parse,因为您对语法进行了一些更改。

rowExpr <- parse(text=paste(column_name,"=='PRIME'"))
rxDataStepXdf(inFile=datasetXDFPath, outFile=outputXDFPath, rowSelection= rowExpr)

另一种选择是使用transformFunc并将column_name作为transfFormObject传递。

rowXform <- function(dataList) {
  dataList$.rxRowSelection <- dataList[[selCol]] == 'PRIME'
  return(dataList)
}
rxDataStep(inFile=datasetXDFPath, outFile=outputXDFPath, 
           transformObject = list(selCol = column_name))