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

 一直很哇塞. 发布于 2023-02-06 13:13

一些数据:

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.我一直在阅读文档,我发现它并不是很清楚.因此,如果有人能够为每个功能提供更清晰的用途,或者可能指向资源以了解更多信息,那将会很有趣.

1 个回答
  • 如果你不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.这是一个功能,它只是令人困惑.

    2023-02-06 13:16 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有