1

我有一个环境数据集,它是混合数据(因子、有序和数字)。我想对该rda()函数使用以下输入方法:

rda(X= Community, Y=Constrained, Z= Conditional)

但是,如果我以这种方式输入所有 3 个数据框,它们需要是矩阵。我不想将约束或条件数据帧转换为矩阵,因为我已在其中分解和排序数据。我发现以正确格式输入它们的唯一另一种方法是将它们单独分解为所有向量。如果您手动执行此操作,则此方法有效,但我需要遍历几个条件和约束数据框。有人有什么想法吗?

一个例子:

library(vegan)
data(dune)
data(dune.env)

rda(dune ~ dune.env$A1 + dune.env$Moisture + dune.env$Management + 
    Condition(dune.env$Use + dune.env$Manure)) 

这就是我想做的,但它很长,而且很难编写代码来迭代数据集

rda(X=dune, Y=dune.env[,1:3], Z=dune.env[,4:5]) 

如果这是可能的,那就太好了,因为我可以将约束变量放在一个数据框中,将条件变量放在另一个数据框中,但它们必须是矩阵,这会混淆有序变量和因子变量。

非常感谢您的帮助

4

1 回答 1

1

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(),未显示。]

于 2013-01-25T23:22:21.073 回答