【问题标题】:Object not found error although column is in the table (data.table format)尽管列在表中,但未找到对象错误(data.table 格式)
【发布时间】:2021-12-17 19:11:42
【问题描述】:

我定义了以下函数:

counter<-function(data,varname){
  data[is.na(varname),.N]
}

当我传递参数时:

counter(df,ip_address_ts)

我得到错误:

Error in .checkTypos(e, names_x) : Object 'ip_address_ts' not found. Perhaps you intended ip_address_ts, email_address_ts

ip_address_ts 在 df 中,为什么这不起作用?

【问题讨论】:

  • 请阅读r标签页顶部关于提问的信息。特别是代码应该是完整的和自包含的。缺少输入和库语句,因此除了您之外没有人可以运行它。
  • 由于您的问题不可重现,我猜:您有一个名为df 的对象,它可能是data.frame,其中有一个名为ip_address_ts 的列。如果这是真的,那么您要求的是“非标准评估”(NSE),如果您对该语言不太熟悉,它可能会很脆弱。我建议保持简单,function(data, varname) data[ is.na(data[[varname]]), ];接下来,您需要解决 .N 的定义位置以及如何在 df 的上下文中使用它。

标签: r function


【解决方案1】:

您的代码正在查找对象ip_address_ts,而不是字符串"ip_address_ts"

counter(df, "ip_address_ts")

【讨论】:

  • data[is.na(varname),.N] 的输入,例如 df[is.na(ip_address_ts),.N] 是一个不是字符串的列名。如果我将列名作为字符串传递,我将无法获得所需的输出。我会得到 0 而不是 5000。
【解决方案2】:

解决方法是使用get,然后将列名作为字符串传递:

counter<-function(data,varname){
  data[is.na(get(varname)),.N]
}
  

counter(df,"ip_address_ts")

有关此提示和其他提示,请查看此链接:

http://brooksandrew.github.io/simpleblog/articles/advanced-data-table/#3-functions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 2019-01-03
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    相关资源
    最近更新 更多