函数参数的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

我正在阅读手册第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

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')