函数参数的R求值
我正在阅读手册第4.3章,但我不明白。也许有人能给我一个快速的解释,为什么R的行为方式如下函数参数的R求值,r,data.table,R,Data.table,我正在阅读手册第4.3章,但我不明白。也许有人能给我一个快速的解释,为什么R的行为方式如下 fCall <- function(i){ dtData[i] } fSubstituteCall <- function(i){ iSub <- substitute(i) dtData[eval(iSub)] } library(data.table) dtData <- data.table(id=LETT
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
fCall这就是你要找的吗
fPrintArgument <- function(i) {
cc <- sys.call(sys.parent(1))
print(deparse(cc[[2]]))
}
fCall <- function(x){
fPrintArgument(x)
}
fCall('C')
fCall(id == 'C')
fPrintArgument以间接的方式,你的问题是一个重复的问题,在这里我用不同的词问了几乎相同的问题。如果你用非数据表
向量这样做,你会看到行为上的差异。@CarlWitthoft,你是什么意思?使用原子向量,符号id
将保持未解析。@Ferdinand.kraft我只是想尝试基本函数(I){myvector[I]}
,函数(I)同上{isub@Ferdinand.kraft-[.data.table
按摩i
(和j
)参数,并在前导调用为eval
fPrintArgument <- function(i) {
cc <- sys.call(sys.parent(1))
print(deparse(cc[[2]]))
}
fCall <- function(x){
fPrintArgument(x)
}
fCall('C')
fCall(id == 'C')