Во-первых, у 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