所以如果我有一个 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/

10-12 21:16