为什么Substitute(variable_x)获得一个数字值而不是'name'对象

时间:2018-10-10 17:10:00

标签: r

这些是我的代码:

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

其结果是“数字”(R 3.4.3版),我听不懂。它应该是“名称”对象。

1 个答案:

答案 0 :(得分: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")):

  

结果的模式通常是“ call”,但原则上可以是任何形式   类型。特别是,单变量表达式的模式为“名称”,并且   常数具有适当的基本模式。'