为什么替换(variable_x)获取数值而不是'name'对象

问题描述 投票:0回答:1

这些是我的代码:

divider <- function(numerator, denominator){
    if(denominator == 0)
    {
        message(class(substitute(denominator)))
    }
    numerator / denominator
}
divider(3, 0)

它的结果是'数字'(版本R 3.4.3),我无法理解这一点。它应该是'名字'对象。

r
1个回答
4
投票

如果你传给一个命名对象,它只会是name;尝试以下方法:

divider <- function(numerator, denominator){
    if(denominator == 0)
    {
        message(class(substitute(denominator)))
    }
    numerator / denominator
}
x = 3
y = 0
divider(x, y)

# name
# [1] Inf

divider(3, 0)

# numeric
# [1] Inf

正如Moody_Mudskipper在答案的评论中指出的那样,这在substitute()的帮助文件中有解释(请参阅help("substitute")):

结果的模式通常是“调用”,但原则上可以是任何类型。特别是,单变量表达式具有模式“name”,常量具有适当的基本模式。

© www.soinside.com 2019 - 2024. All rights reserved.