r - 列名等于变量名

标签 r data.table

这个问题在这里已经有了答案:





Subsetting data.table using variables with same name as column

(2 个回答)


2年前关闭。




我该如何处理这个案子?

d <- data.table(
  a = c(1, 2, 3)
)
a <- 2
d[a == a]

给出:

   a
1: 1
2: 2
3: 3

预期结果是:

   a
1: 2

最佳答案

我也无意中成为了这个的牺牲品。这是关于一般范围的界定,而不仅仅是 data.table ( dplyr 会做同样的事情)。您可以在 function 中找到类似的问题。通过定义一个变量来屏蔽父(或全局)环境中的同名变量。

a <- 1
# a brain-dead example
myfunc <- function() {
  a <- 2
  a - a
}

在那function例如,“显然”存在完全歧义,其中 a是哪个,但在您的问题中实际上是同一件事。假设不等式的 LHS 或 RHS 始终在数据内部,而另一个始终在外部,在任何时候都是不安全的;搜索从内部开始,如果没有找到就移到外部。因为在==的两边里面都找到了,LHS 和 RHS 都使用“内部”。

我想知道是否很难说“如果在 LHS 上发现它‘内部’,那么不要在 RHS 上查看‘内部’”,但我认为这增加了不必要的复杂性。特别是因为在 R 的正常变量搜索中有效地搜索变量,不一定是包代码中的手动代码。

最佳答案?不要这样做。解决方法?之一:

# this "should" always work, assuming "where" the external variable is defined
d[a == get("a", envir=parent.frame())]

# this only works if it is truly in the global environment
d[a == get("a", envir=globalenv())]

# and @nicola's suggestion:
d[a == evalq(a, envir=parent.frame())]

关于r - 列名等于变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57856049/

相关文章:

regex - 有没有办法获取名称与给定正则表达式匹配的所有函数的列表?

r - data.table 的包装函数

r - 有效地将数据从 data.table 转换为矩阵(速度和内存)

mysql - R中根据条件合并数据表信息

函数开发中 knitr/data.table 组合的 R 奇怪范​​围问题

r - 从 R 调用 python 函数并传递参数

R - 用 'rep' 做一个重复序列

r - 如何在 RStudio 中设置 vim/emacs 键绑定(bind)?

R:从网站中提取单词

r - 如何使用现有 data.table 的列名构造一个空的 data.table?