R - 检测表达式

SFu*_*n28 6 r

将什么类型的对象传递给myFuncx?它似乎不是一个表达式,也不是一个函数而str只是评估它.我明白我可以force()用来评估.我想知道是否有一些方法可以收集有关x的更多信息而不进行评估.

myFunc = function( x )
{
    is.expression( x )    
    is.function( x )
    str( x )
}
myFunc( { x = 5; print( x + 1 ) } )
Run Code Online (Sandbox Code Playgroud)

koh*_*ske 6

您可以match.call用于提取参数:

myFunc <- function( x ) {
    x <- match.call()$x
    print(class(x))
    print(typeof(x))
    print(mode(x))
    print(storage.mode(x))
    print(is.expression(x))
    print(is.call(x))
    if (is.call(x)) print(x[[1]])
}
myFunc({x = 5; print("a")})
myFunc(expression(x))
x <- factor(1)
myFunc(x)
myFunc(1)
Run Code Online (Sandbox Code Playgroud)

可能我需要说这{是R中的一个函数,所以不过{...}call.

更新:为什么xfunction同时{function:

f <- function(x) {
    x <- match.call()$x
    print(eval(x[[1]]))
    print(is.function(eval(x[[1]])))
}

f({1})
Run Code Online (Sandbox Code Playgroud)