gpt4 book ai didi

函数参数的 R 评估

转载 作者:行者123 更新时间:2023-12-01 06:32:38 31 4
gpt4 key购买 nike

我正在阅读 http://www.cran.r-project.org/doc/manuals/R-lang.pdf手册第 4.3 章,我就是不明白。也许有人可以给我一个快速的解释,为什么 R 的行为方式如下。

fCall <- function(i){       
dtData[i]
}

fSubstituteCall <- function(i){
iSub <- substitute(i)
dtData[eval(iSub)]
}


library(data.table)
dtData <- data.table(id=LETTERS, value=1:26)
dtData[id == 'C'] #works
fCall(id == 'C') #Error in eval(expr, envir, enclos) : object 'id' not found
fSubstituteCall(id == 'C') #works

为什么 fSubstituteCall 有效而 fCall 无效?它与 i 的评估有关吗?或者它实际上是特定于 data.table 包的东西?

编辑:

到目前为止,感谢您的回答。我有点明白,我同意它是 stackoverflow.com/q/14837902/602276 的副本。所以我要简化我的问题。

如何让 fPrintArgument 将参数 i 打印为字符串?因此,在 fCall('C') 的情况下,它应该打印出字符串 'C',而在 fCall(id == 'C') 中,它应该打印出字符串 'id == "C"'。

这可能吗?
fPrintArgument <- function(i){
#This is what i have come up with so far, but it doesn't work
print(deparse(substitute(i)))
print(deparse((i)))
}

fCall <- function(x){
fPrintArgument(x)
}

fCall('C')
fCall(id == 'C')

最佳答案

是你要找的吗?

fPrintArgument <- function(i) {
cc <- sys.call(sys.parent(1))
print(deparse(cc[[2]]))
}
fCall <- function(x){
fPrintArgument(x)
}
fCall('C')
fCall(id == 'C')

关于函数参数的 R 评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18487617/

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