【发布时间】:2017-04-19 14:50:14
【问题描述】:
上下文
作为R: Pass data.frame by reference to a function 和How to add a column in the data frame within a function 的后续行动
我正在尝试以下看似简单的功能:
naToZero <- function(df) {
df$Vol[is.na(df$Vol)] <- 0
}
数据帧
> str(WFM)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 990571 obs. of 14 variables:
$ Date : chr "04/12/2017" "04/12/2017" "04/12/2017" "04/12/2017" ...
$ Time :Classes 'hms', 'difftime' atomic [1:990571] 41970 41969 41968 41967 41966 ...
.. ..- attr(*, "units")= chr "secs"
$ Bar# : chr "197953/197953" NA "197952/197953" NA ...
$ Bar Index : int 0 NA -1 NA NA -2 NA NA -3 NA ...
$ Tick Range: int 0 NA 0 NA NA 0 NA NA 0 NA ...
$ Open : num 33.9 NA 33.9 NA NA ...
$ High : num 33.9 NA 33.9 NA NA ...
$ Low : num 33.9 NA 33.9 NA NA ...
$ Close : num 33.9 NA 33.9 NA NA ...
$ Vol : int 100 NA 200 NA NA 100 NA NA 400 NA ...
$ MACDHist : num -59 NA -87 NA NA ...
$ MACD : num -450 NA -445 NA NA ...
$ MACDSig : num -391 NA -358 NA NA ...
$ ZScore1 : num NA NA NA NA NA NA NA NA NA NA ...
希望使用这个功能来加快数据清理的速度。
问题
在我在脚本编辑器中运行该函数后,然后传递一个 data.frame 来运行它。但是该功能没有做任何事情,当我查看(WFM)时,它仍然是相同的旧数据。但是,当我手动运行命令时:
WFM$Vol[is.na(WFM$Vol)] <- 0
然后就可以了。
我尝试过的事情
我尝试根据我看到的两个链接进行实验,似乎相关:
使用WFM <- naToZero(WFM),产生一个具有单个值的向量,0。
尝试使用WFM <- data.table(WFM) 并运行该函数...同样的事情。
我一定错过了一些基本的东西。
【问题讨论】: