gpt4 book ai didi

R:如何编写一个函数来获取 data.table 中列的级别

转载 作者:行者123 更新时间:2023-12-04 11:54:12 25 4
gpt4 key购买 nike

一些数据:

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

由于我没有太多编程经验,所以我不知道用于在函数中传递变量的函数的确切目的是什么:substitutedeparse评估解析。我一直在阅读文档,但我发现它不是很清楚。因此,如果有人可以为每个功能提供更清晰的用途,或者可能指向资源以了解更多信息,那将会很有趣。

最佳答案

如果您没有使用 R(或一般编程)的经验,请避免使用 substitutedeparseeval 等。它们很少必要的。

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。这是一个函数,它只是令人困惑。

关于R:如何编写一个函数来获取 data.table 中列的级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20940905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com