gpt4 book ai didi

r - 为什么使用 "data"和 "formula"关键字参数时顺序很重要?

转载 作者:行者123 更新时间:2023-12-02 16:01:10 25 4
gpt4 key购买 nike

R中,为什么绘图时dataformula关键字的顺序很重要?我认为对于命名参数顺序应该很重要......

有关我的意思的示例,请查看以下代码:

library(MASS)
data(menarche)

# Correct formulation (apparently):
plot(formula=Menarche/Total ~ Age, data=menarche)

# In contrast, note how the following returns an error:
plot(data=menarche, formula=Menarche/Total ~ Age)

这只是 plot 函数的一个怪癖还是其他函数中也存在这种行为?

最佳答案

它与 S3 通用 plot() 的 S3 方法相关。 S3 根据第一个参数调度方法,但确切的功能很复杂,因为 formula 被允许作为 plot() 的常见通用参数的特殊异常(exception),这些参数是 >xy 加上 ...:

> args(plot)
function (x, y, ...)
NULL

因此,在第一种情况下,会运行 plot.formula() 方法,因为提供的第一个参数是一个公式,并且与 plot.formula() 的参数匹配

> args(graphics:::plot.formula)
function (formula, data = parent.frame(), ..., subset, ylab = varnames[response],
ask = dev.interactive())
NULL

例如:

> debugonce(graphics:::plot.formula)
> plot(formula=Menarche/Total ~ Age, data=menarche)
debugging in: plot.formula(formula = Menarche/Total ~ Age, data = menarche)
debug: {
m <- match.call(expand.dots = FALSE)
[...omitted...]

相反,当您调用 plot(data=menarche, Formula=Menarche/Total ~ Age) 时,第一个参数是数据框,因此是 graphics:::plot。 data.frame方法被调用:

> plot(data=menarche, formula=Menarche/Total ~ Age)
Error in is.data.frame(x) : argument "x" is missing, with no default
> traceback()
3: is.data.frame(x)
2: plot.data.frame(data = menarche, formula = Menarche/Total ~ Age)
1: plot(data = menarche, formula = Menarche/Total ~ Age)

但由于该方法需要一个参数 x,而您没有提供该参数,因此您会收到有关缺少 x 的错误。

因此,从某种意义上说,命名参数的顺序并不重要,也不应该重要,但是当 S3 泛型发挥作用时,方法分派(dispatch)首先决定将参数传递给哪个方法,然后再决定提供的参数 - 不是顺序 - 通常会让您感到困惑,尤其是在将 formula 方法与其他非formula 方法混合时。

关于r - 为什么使用 "data"和 "formula"关键字参数时顺序很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24893878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com