gpt4 book ai didi

r - 以点开头的 data.frame 的变量在 inside() 中消失

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

通过以点开头的名称(如 .identifier )调用变量是合法的。然而,within()函数不会保留它们。我错过了什么?或者这是一个错误?

A <- data.frame(.has.a.dot=1:10,has.no.dot=letters[1:10])
within(A, new.variable<-rnorm(10,.has.a.dot))

给出:
   has.no.dot new.variable
1 a 1.300361
2 b 3.014026
3 c 2.354260
4 d 4.261637
5 e 5.159326
6 f 7.178712
7 g 6.438039
8 h 8.253819
9 i 9.463351
10 j 8.828403

最佳答案

这似乎是因为 as.list 中的标准类的方法 environment .标准参数是 all.names = FALSE .来自 ?as.list :

all.names a logical indicating whether to copy all values or (default) only those whose names do not begin with a dot.



您可以更改 within.data.frame方法如下:
within.data.frame <- function (data, expr, ...) 
{
parent <- parent.frame()
e <- evalq(environment(), data, parent)
eval(substitute(expr), e)
# l <- as.list(e) # removed this line
l <- as.list(e, all.names=TRUE) # added this line
l <- l[!sapply(l, is.null)]
nD <- length(del <- setdiff(names(data), (nl <- names(l))))
data[nl] <- l
if (nD)
data[del] <- if (nD == 1)
NULL
else vector("list", nD)
data
}

然后你会得到你预期的行为:
within(A, new <- .has.a.dot)
## .has.a.dot has.no.dot new
## 1 1 a 1
## 2 2 b 2
## 3 3 c 3
## 4 4 d 4
## 5 5 e 5
## 6 6 f 6
## 7 7 g 7
## 8 8 h 8
## 9 9 i 9
## 10 10 j 10

关于r - 以点开头的 data.frame 的变量在 inside() 中消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27865025/

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