修改函数中的data.table列类

时间:2016-02-19 23:48:57

标签: r function data.table

我将列名作为字符串传递给函数,并希望更改相应列的类。目前,我使用get(varName)。

引用data.table的列

我有一个data.table,其中包含一个我希望转换为字符的因子列。样本数据:

dt <- data.table(factor(c("b","c")),foo=c(4,2))
sapply(dt, class)

简化尝试:

fo2 <- function(data, change){
  data[,get(change):=as.character(get(change))]
  return(data)
}

fo2(data=dt, change="V1")

Error in get(change) : object 'V1' not found

感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:2)

您无需在左侧使用get。您可以将功能更改为:

fo2 <- function(data, change){
  data[, (change) := as.character(get(change))][]
}

使用您的示例数据,它看起来像这样:

dt <- data.table(factor(c("b","c")),foo=c(4,2))
sapply(dt, class)
#       V1       foo 
# "factor" "numeric" 
fo2(data=dt, change="V1")
#   V1 foo
#1:  b   4
#2:  c   2
str(dt)
#Classes ‘data.table’ and 'data.frame': 2 obs. of  2 variables:
# $ V1 : chr  "b" "c"
# $ foo: num  4 2
# - attr(*, ".internal.selfref")=<externalptr> 

答案 1 :(得分:0)

我相信这可以做到:

dt <- data.table(factor(c("b","c")),foo=c(4,2),char=c("X","Y"))

change <- c("V1", "char")

dt[, change] <- dt[, lapply(.SD, as.character), .SDcols = change]