RevoScaleR rxDataStep выбор строки не удается при использовании переменной

Я пытаюсь выполнить выбор в xdf-файл с помощью rxDataStep. Я использую rowSelection, и он работает, когда я использую явные значения, но не когда я использую переменную, например: это работает:

tmp <- rxDataStep(alias.Xdf, transforms = list(TT_AMOUNT = DC_AMOUNT * RT_AMOUNT, UNIT_PRICE = RT_VALUE / TT_AMOUNT), varsToKeep = c('DC_AMOUNT', 'RT_AMOUNT', 'RT_VALUE'), 
            rowSelection = (A_ID == 1646041))

но это не

x <- 1646041
tmp <- rxDataStep(alias.Xdf, transforms = list(TT_AMOUNT = DC_AMOUNT * RT_AMOUNT, UNIT_PRICE = RT_VALUE / TT_AMOUNT), varsToKeep = c('DC_AMOUNT', 'RT_AMOUNT', 'RT_VALUE'), 
             rowSelection = (A_ID == x))

это терпит неудачу с сообщением:

ERROR: The sample data set for the analysis has no variables.
Caught exception in file: CxAnalysis.cpp, line: 3848. ThreadID: 31156 Rethrowing.
Caught exception in file: CxAnalysis.cpp, line: 5375. ThreadID: 31156 Rethrowing.

Что здесь не так? Я боролся с этим часами, пробовал каждый синтаксис, найденный в Интернете. Благодарю.

1 ответ

Решение

Возможно, нам придется передать его на transformObjects

library(RevoScaleR)
rxDataStep(alias.Xdf, transforms = list(TT_AMOUNT = DC_AMOUNT * RT_AMOUNT, 
       UNIT_PRICE = RT_VALUE / TT_AMOUNT),
       varsToKeep = c('DC_AMOUNT', 'RT_AMOUNT', 'RT_VALUE'), 
         rowSelection = (A_ID == x1), transformObjects = list(x1=x))

Используя воспроизводимый пример

set.seed(100)
myData <- data.frame(x = 1:100, y = rep(c("a", "b", "c", "d"), 25),
                 z = rnorm(100), w = runif(100))

z1 <- 2


myDataSubset <- rxDataStep(inData = myData,
                       varsToKeep = c("x", "w", "z"),
                rowSelection = z > zNew,
                        transformObjects = list(zNew=z1))
#Rows Read: 100, Total Rows Processed: 100, Total Chunk Time: 0.007 seconds 
myDataSubset
#   x          w        z
#1 20 0.03609544 2.310297
#2 64 0.79408518 2.581959
#3 96 0.07123327 2.445683

Это также может быть сделано с dplyr

library(dplyr)
myData %>%
      select(x, w, z) %>%
      filter(z > z1)
#   x          w        z
#1 20 0.03609544 2.310297
#2 64 0.79408518 2.581959
#3 96 0.07123327 2.445683
Другие вопросы по тегам