在=.FALSE下收集data.table中的因子水平

时间:2015-01-14 09:06:13

标签: r reference functional-programming data.table

这是data.table 1.9.4。

上下文

我正在函数调用中包含一个ML训练操作,我想获得已经传入的data.table列的级别。我注意到这需要列参数为使用get()重新引用:

演示失败方法的最小示例:

library(data.table)
test.table <- data.table(col1 = rep(c(0,1), times = 10), col2 = 1:20)
col.id <- "col1"

str(test.table[,levels(col.id),with=FALSE])

Classes ‘data.table’ and 'data.frame':  0 obs. of  0 variables
 - attr(*, ".internal.selfref")=<externalptr>

> str(test.table[,levels(factor(col.id)), with=FALSE])
Classes ‘data.table’ and 'data.frame':  20 obs. of  1 variable:
 $ col1: num  0 1 0 1 0 1 0 1 0 1 ...
 - attr(*, ".internal.selfref")=<externalptr>

> str(test.table[,levels(as.factor(col.id)), with=FALSE])
Classes ‘data.table’ and 'data.frame':  20 obs. of  1 variable:
 $ col1: num  0 1 0 1 0 1 0 1 0 1 ...
 - attr(*, ".internal.selfref")=<externalptr>

levels(test.table[,factor(col.id), with=FALSE])
NULL

levels(test.table[,as.factor(col.id), with=FALSE])
NULL

然而,test.table[,col.id, with = FALSE]是访问该列的有效方式。

以下是一些有效的方法:

> test.table[,levels(as.factor(get(col.id)))]
[1] "0" "1"
> test.table[,levels(as.factor(get(col.id)))]
[1] "0" "1"
> test.table[,levels(factor(get(col.id)))]
[1] "0" "1"
> levels(test.table[,factor(get(col.id))])
[1] "0" "1"

这是为什么?这是打算吗?

0 个答案:

没有答案