rda()
rda(X, Y, Z)
在模式中调用时将获取数据帧。关于社区数据矩阵的论点,?rda
但数据框架是可以接受的,甚至可以假设,因为我们通过转换这些输入as.matrix()
,这就是问题所在。
你rda()
用公式打电话很傻。有一个data
论点,所以你可以这样做:
rda(dune ~ A1 + Moisture + Management + Condition(Use + Manure), data = dune.env)
这有点容易,也不那么冗长。
也可以走捷径,
rda(dune ~ . + Condition(Use + Manure), data = dune.env)
通过使用.
并且仅在数据对象中具有模型拟合所需的那些变量。
您可以通过让 R 为您构建公式来做到这一点。
nams <- names(dune.env)
form <- formula(paste("dune ~", paste(nams[1:3], collapse = " + "),
"+ Condition(", paste(nams[4:5], collapse = " + "), ")"))
rda(form, data = dune.env)
虽然这看起来很复杂,但它可以很容易地包装到一个函数中:
buildF <- function(X, Y, Z, data) {
nams <- names(data)
X <- deparse(substitute(X))
f <- formula(paste(X, " ~", paste(nams[Y], collapse = " + "),
"+ Condition(", paste(nams[Z], collapse = " + "), ")"))
environment(f) <- parent.frame()
f
}
在使用中给出:
> buildF(dune, 1:3, 4:5, data = dune.env)
dune ~ A1 + Moisture + Management + Condition(Use + Manure)
> f <- buildF(dune, 1:3, 4:5, data = dune.env)
> f
dune ~ A1 + Moisture + Management + Condition(Use + Manure)
> rda(f, data = dune.env)
Call: rda(formula = dune ~ A1 + Moisture + Management +
Condition(Use + Manure), data = dune.env)
Inertia Proportion Rank
Total 84.1237 1.0000
Conditional 35.3628 0.4204 6
Constrained 27.8434 0.3310 6
Unconstrained 20.9175 0.2487 7
Inertia is variance
Some constraints were aliased because they were collinear (redundant)
Eigenvalues for constrained axes:
RDA1 RDA2 RDA3 RDA4 RDA5 RDA6
14.674 4.718 2.756 2.346 2.085 1.265
Eigenvalues for unconstrained axes:
PC1 PC2 PC3 PC4 PC5 PC6 PC7
6.6269 4.3091 3.5491 2.5465 2.3403 0.9335 0.6121
[与其他输出完全相同rda()
,未显示。]