这是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"
这是为什么?这是打算吗?