这现在在v1.8.11中得到修复,但可能不是您希望的方式。来自新闻:
FR #4867 现已实施。DT[, as.factor('x'), with=FALSE]
where x
is a column in DT
, 现在等同于DT[, "x", with=FALSE]
而不是以错误结束。感谢 tresbot 报告 SO:Converting multiple data.table columns to factor in R
一些解释:不同之处with=FALSE
在于使用时的列data.table
不再被视为变量。那是:
tst[, as.factor(a), with=FALSE] # would give "a" not found!
会导致错误"a" not found
。但是你要做的是:
tst[, as.factor('a'), with=FALSE]
您实际上是在创建一个因子"a"
并level="a"
要求对该列进行子集化。这真的没有多大意义。以data.frame
s 为例:
DF <- data.frame(x=1:5, y=6:10)
DF[, c("x", "y")] # gives back DF
DF[, factor(c("x", "y"))] # gives back DF again, not factor columns
DF[, factor(c("x", "x"))] # gives back two columns of "x", still integer, not factor!
因此,基本上,当您使用with=FALSE
的不是该列的元素,而是该列名称时,您应用的因素是……我希望我已经设法很好地传达了差异。如果有任何混淆,请随时编辑/评论。