所以如果我有一个 data.table 定义为:
> dt <- data.table (x=c(1,2,3,4), y=c("y","n","y","m"), z=c("pickle",3,8,"egg"))
> dt
x y z
1: 1 y pickle
2: 2 n 3
3: 3 y 8
4: 4 m egg
还有一个变量
fn <- "z"
我知道我可以通过以下方式从 data.table 中提取一列:
> dt[,fn, with=FALSE]
我不知道该怎么做的是 data.table 等效于以下内容:
> factorFunction <- function(df, fn) {
df[,fn] <- as.factor(df[,fn])
return(df)
}
如果我设置 fn="x"并调用 factorFunction(data.frame(dt),fn) 它工作得很好。
所以我用data.table试试,但这不起作用
> factorFunction <- function(dt, fn) {
dt[,fn, with=FALSE] <- as.factor(dt[,fn, with=FALSE])
return(dt)
}
sort.list(y) 中的 错误:对于 'sort.list','x' 必须是原子的
您是否在列表中调用了“排序”?
最佳答案
你可以试试
dt[,(fn):= factor(.SD[[1L]]),.SDcols=fn]
如果有多个列,使用
lapply(.SD, factor)
将其包装在一个函数中
factorFunction <- function(df, fn) {
df[, (fn):= factor(.SD[[1L]]), .SDcols=fn]
}
str(factorFunction(dt, fn))
#Classes ‘data.table’ and 'data.frame': 4 obs. of 3 variables:
#$ x: num 1 2 3 4
#$ y: chr "y" "n" "y" "m"
#$ z: Factor w/ 4 levels "3","8","egg",..: 4 1 2 3
关于R 通过函数调用传递 data.table 参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30921952/