R 为什么替换(变量_x)获取一个数值而不是“name”对象

R 为什么替换(变量_x)获取一个数值而不是“name”对象,r,R,这是我的密码: divider <- function(numerator, denominator){ if(denominator == 0) { message(class(substitute(denominator))) } numerator / denominator } divider(3, 0) 它的结果是'numeric'版本R3.4.3,我无法理解这一点。它应该是“name”对象 仅当您将命名对象传递给它时,它才会是n

这是我的密码:

divider <- function(numerator, denominator){
    if(denominator == 0)
    {
        message(class(substitute(denominator)))
    }
    numerator / denominator
}
divider(3, 0)
它的结果是'numeric'版本R3.4.3,我无法理解这一点。它应该是“name”对象

仅当您将命名对象传递给它时,它才会是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
正如在对答案的评论中所指出的,替换的帮助文件中对此进行了解释,请参见帮助替换:

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

只有当您传递一个命名对象时,它才会是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
正如在对答案的评论中所指出的,替换的帮助文件中对此进行了解释,请参见帮助替换:

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


哦,我的上帝!我没有注意到命名对象和仅“0”之间的区别。多谢各位@好吧,没问题,很高兴有帮助@Tal.和right from?substitute:“结果的模式通常是调用,但原则上可以是任何类型。特别是,单变量表达式具有模式名称,常量具有适当的基模式。“。许多函数(尤其是基本函数)的“帮助”页面都有一个“值”部分,当您遇到此类问题时,应立即检查该部分。@Moody\u mudscapper从帮助文件中引用了一段很好的话。我将在结尾加上这一点作为解释,并适当考虑course@Moody_Mudskipper虽然我已经读了帮助页,但还是没听清楚。。非常抱歉。谢谢你,我的天啊!我没有注意到命名对象和仅“0”之间的区别。多谢各位@好吧,没问题,很高兴有帮助@Tal.和right from?substitute:“结果的模式通常是调用,但原则上可以是任何类型。特别是,单变量表达式具有模式名称,常量具有适当的基模式。“。许多函数(尤其是基本函数)的“帮助”页面都有一个“值”部分,当您遇到此类问题时,应立即检查该部分。@Moody\u mudscapper从帮助文件中引用了一段很好的话。我将在结尾加上这一点作为解释,并适当考虑course@Moody_Mudskipper虽然我已经读了帮助页,但还是没听清楚。。非常抱歉。谢谢你的设备