Сбой rxDataStep в пакете RevoScaleR

Я пытаюсь создать новый столбец фактора в наборе данных .xdf с помощью функции rxDataStep в RevoScaleR:

rxDataStep(nyc_lab1
         , nyc_lab1
         , transforms = list(RatecodeID_desc = factor(RatecodeID, levels=RatecodeID_Levels, labels=RatecodeID_Labels))
         , overwrite=T
         )

где nyc_lab1 — указатель на файл .xdf. Я знаю, что файл в порядке, потому что я импортировал его в таблицу данных и успешно создал столбец нового фактора.

Однако я получаю следующее сообщение об ошибке:

Error in doTryCatch(return(expr), name, parentenv, handler) : 
  ERROR: The sample data set for the analysis has no variables.

Что может быть не так?


person Jerome Smith    schedule 11.03.2017    source источник


Ответы (1)


Во-первых, у RevoScaleR есть некоторые недостатки, когда дело доходит до замены данных. В частности, перезапись входного файла выходным иногда может привести к сбою rxDataStep по неизвестным причинам.

Даже если это сработает, вам, вероятно, все равно не следует этого делать. Если в вашем коде есть ошибка, вы рискуете уничтожить свои данные. Вместо этого каждый раз записывайте в новый файл и удаляйте старый файл только после того, как убедитесь, что он вам больше не нужен.

Во-вторых, любой объект, на который вы ссылаетесь и который не является частью самого набора данных, должен быть передан через аргумент transformObjects. См. ?rxTransform. По сути, функции rx* предназначены для переноса в распределенные вычислительные контексты, где сеанс R, выполняющий код, не совпадает с вашим локальным сеансом. В этом сценарии вы не можете предположить, что объекты в вашей глобальной среде будут существовать в сеансе, в котором выполняется код.

Попробуйте что-то вроде этого:

nyc_lab2 <- RxXdfData("nyc_lab2.xdf")
nyc_lab2 <- rxDataStep(nyc_lab1, nyc_lab2,
    transforms=list(
         RatecodeID_desc=factor(RatecodeID, levels=.levs, labels=.labs)
    ),
    rxTransformObjects=list(
         .levs=RatecodeID_Levels,
         .labs=RatecodeID_Labels
    )
)

Или вы можете использовать dplyrXdf, который позаботится обо всем этом управлении файлами за вас:

nyc_lab2 <- nyc_lab1 %>% factorise(RatecodeID)
person Hong Ooi    schedule 12.03.2017
comment
Спасибо, но даже когда я пишу в новый файл, он все равно вылетает с тем же сообщением об ошибке. - person Jerome Smith; 14.03.2017
comment
Я забыл часть transformObjects. Посмотрите, работает ли это сейчас. - person Hong Ooi; 14.03.2017