2015-02-26 1 views
0

Я присвоенный переменный взять имя столбца набора данных, скажет:Реферирование значения переменного в качестве колонков для rowSelection аргумента в функции rxDataStepXdf

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")) 

Это не работает, поскольку я предполагаю, что функция ищет столбец, имя которого является «column_name». Я попытался следующие пути и все они не работали для меня:

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

Вы можете создать свое выражение за пределами вызова до 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)) 
+0

Это действительно полезно! Большое спасибо! – Ruser