gpt4 book ai didi

r - 列名等于变量名

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

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





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/

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