一些数据:
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
.这是一个功能,它只是令人困惑.