在R中使用公式作为关键字参数(命名参数)和wilcox.test

在R中使用公式作为关键字参数(命名参数)和wilcox.test,r,formula,keyword-argument,R,Formula,Keyword Argument,为什么在R中将“公式”用作wilcox.test的关键字参数时出错?文件说它有一个“公式”参数 df = data.frame(A=rnorm(10), D=sample(c('p','q'), 10, replace=T)) wilcox.test(data=df, A~D) wilcox.test(data=df, formula=A~D) > df = data.frame(A=rnorm(10), D=sample(c('p','q'), 10, replace=T)) >

为什么在R中将“公式”用作wilcox.test的关键字参数时出错?文件说它有一个“公式”参数

df = data.frame(A=rnorm(10), D=sample(c('p','q'), 10, replace=T))
wilcox.test(data=df, A~D)
wilcox.test(data=df, formula=A~D)

> df = data.frame(A=rnorm(10), D=sample(c('p','q'), 10, replace=T))
> wilcox.test(data=df, A~D)

    Wilcoxon rank sum test

data:  A by D
W = 13, p-value = 1
alternative hypothesis: true location shift is not equal to 0

> wilcox.test(data=df, formula=A~D)
Error in wilcox.test.default(data = df, formula = A ~ D) : 
  argument "x" is missing, with no default

我认为这是因为泛型方法和公式方法对公式参数使用了不同的名称,即,
x
formula
。通常在编写S3方法时,方法的参数名称应与泛型一致

> args(wilcox.test)
function (x, ...) 
NULL

> args(stats:::wilcox.test.formula)
function (formula, data, subset, na.action, ...) 
NULL

你的论点顺序不正确

> wilcox.test(formula=A~D, data=df)

    Wilcoxon rank sum test

data:  A by D
W = 13, p-value = 0.6667
alternative hypothesis: true location shift is not equal to 0

42-指出我对于公式参数的用途是不正确的,因为如果没有可选的数据参数,数据对象将从环境中继承。函数选择默认方法而不是公式方法,因为它在第一个参数位置没有看到公式参数。否则,参数顺序就不重要了。

很有趣-如果它是第一个-
wilcox.test(formula=A~D,data=df)
或者如果你明确地称它为-
stats:::wilcox.test.formula(data=df,formula=A~D)
我对这类事情不太有信心,但我认为这是因为基于函数调用的第一个参数,
wilcox.test
函数被分派到
wilcox.test.default
wilcox.test.formula
。是的,我认为这是因为默认的
S3
方法函数。关于
plot
关键字参数的类似帖子通常可以按R中的任何顺序进行。公式参数不是数据参数。同意马吕斯关于应该发生什么的观点,但在用于解码公式的方法中,更典型的约定是公式参数应该是第一个,因为分派是在第一个参数上。请参见
lm.formula
xtabs.formula
ggplot
函数中的示例不能被视为标准函数,因为在R.@Marius的演化过程中,它们比基函数或统计函数来得晚得多。虽然这是事实,但在这种特殊情况下,需要首先调用公式方法,而不是默认方法,如42-所述。如果这个函数没有公式方法,那也没关系。