有人可以解释为什么R中的以下代码根据使用=
还是<-
来分配steps
参数而得出不同的结果:
library(MASS)
quine.hi <- aov(log(Days + 2.5) ~ .^4, quine)
quine.nxt <- update(quine.hi, . ~ . - Eth:Sex:Age:Lrn)
quine.stp <- stepAIC(quine.nxt,
scope = list(upper = ~Eth*Sex*Age*Lrn, lower = ~1),
trace = TRUE,
steps = 6)
quine.stp_2 <- stepAIC(quine.nxt,
scope = list(upper = ~Eth*Sex*Age*Lrn, lower = ~1),
trace = TRUE,
steps <- 6)
答案 0 :(得分:4)
<-
和=
在函数调用中不可互换。当结果相同而不是不同时,应该感到惊讶。 =
用于命名函数类中的参数; ->
不提供名称。
这意味着您致电时
stepAIC(quine.nxt,
scope = list(upper = ~Eth*Sex*Age*Lrn, lower = ~1),
trace = TRUE,
steps <- 6)
第四个参数未命名。它经过评估,仅返回6(->
运算符返回RHS值作为返回值),并被视为未命名的参数。插入所有命名值后,未命名参数将按接收顺序传递给函数。 stepAIC
函数签名是
stepAIC(object, scope, scale ,
direction, trace, keep , steps , use.start ,k = 2, ...)
因此,由于您已指定scope=
和trace=
,因此6
的值将进入scale=
参数。所以你写的与
stepAIC(quine.nxt,
scope = list(upper = ~Eth*Sex*Age*Lrn, lower = ~1),
trace = TRUE,
6)
与
相同stepAIC(quine.nxt,
scope = list(upper = ~Eth*Sex*Age*Lrn, lower = ~1),
scale = 6,
trace = TRUE)
因此重要的信息是<-
仅应用于赋值,=
仅应用于命名函数调用中的参数。