我将列名作为字符串传递给函数,并希望更改相应列的类。目前,我使用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
感谢您提供任何帮助。
答案 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]