[英]R: How to write a function that gets the levels of column in a data.table
一些数据:
require(data.table)
set.seed(123)
DT <- data.table(factor = c("a", "b", "c"), num = rpois(6, 30))
DT[["factor"]] <- factor(DT[["factor"]])
levels(DT[["factor"]])
# [1] "a" "b" "c"
我正在尝试编写一个获取DT级别的函数。 这是我到目前为止所做的尝试:
get_levels <- function(data, factor){
data = substitute(data)
factor = substitute(factor)
factor_levels = levels(data[["factor"]])
print(factor_levels)
}
get_levels(DT, factor)
get_levels2 <- function(data, factor){
data = substitute(data)
factor = substitute(factor)
factor_levels = levels(data[[factor]])
print(factor_levels)
}
get_levels2(DT, factor)
get_levels3 <- function(data, factor){
data = substitute(data)
factor = substitute(factor)
factor_levels = levels(eval(data[[deparse(factor)]]))
print(factor_levels)
}
get_levels3(DT, factor)
我收到这个错误:
Error in data[["factor"]] : object of type 'symbol' is not subsettable
还有这个:
Error in data[[deparse(factor)]] :
object of type 'symbol' is not subsettable
由于我没有太多的编程经验,我不知道用于在函数中传递变量的函数的确切用途是什么: substitute
, deparse
, eval
, parse
。 我一直在阅读文档,我发现它并不是很清楚。 因此,如果有人可以为每个功能提供更清晰的用途,或者可能指向资源以了解更多信息,那将会很有趣。
如果您对R(或一般编程)没有经验,请避免使用substitute
, deparse
, eval
等。它们很少是必需的。
DT <- data.table(f = c("a", "b", "c"), num = rpois(6, 30))
DT[["f"]] <- factor(DT[["f"]])
get_levels <- function(data,fac){
levels(data[[fac]])
}
get_levels(DT,'f')
并且不要调用您的列factor
。 这是一个功能,它只是令人困惑。
以下打印出数据集中每个因子列的级别编号:
sapply(sapply(DT[,sapply(DT, is.factor)], levels), length)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.