我不确定为什么在运行此类代码时出现上述错误:
library(data.table)
# Test data.
test <- data.table(y=1:10, wt=rep(1, 10), cat=c(rep(c("A", "B", "A", "A", "B"), 2)))
#code that fails
bad1 <- test[, lapply(.SD, eval(parse(text=("function(x) mean(x)")))), by=c("cat"),
.SDcols=c("y", "wt")]
此代码确实有效:
good1 <- test[, lapply(.SD, mean), by=c("cat"), .SDcols=c("y", "wt")]
good2 <- test[, lapply(.SD, function(x) mean(x)), by=c("cat"), .SDcols=c("y", "wt")]
good3 <- test[, lapply(.SD, eval(parse(text=("mean")))), by=c("cat"), .SDcols=c("y",
"wt")]
我尝试使用类似于第一个示例的结构的原因是因为我需要能够从字符串构建表达式。在过去,这种方法已经奏效,但最近相同的代码一直给我这个错误:
"Error in jsub[[ii]][[1L]] == "mean" : comparison is not allowed for expressions
使用R版本3.1和data.table 1.9.2