0

我对 R 有点陌生,所以请原谅我的基本问题。

我在一个完整的数据集(358 个站点,40 个非生物参数,100 个物种观察)上执行 CCA。

library(vegan)
env <- read.table("env.txt", header = TRUE, sep = "\t", dec = ",")
otu <- read.table(otu.txt", header = TRUE, sep = "\t", dec = ",")
cca <- cca(otu~., data=env)
cca.plot <- plot(cca, choices=c(1,2))
vif.cca(cca)
ccared <- cca(formula = otu ~EnvPar1,2,n, data = env)
ccared.plot <- plot(ccared, choices=c(1,2))
orditorp(ccared.plot, display="sites")

这可以在第一列中不使用样本名称的情况下工作(最初,包含数字样本名称的第一列被解释为变量,所以我使用了没有该信息的表。当我通过 orditorp 将站点名称添加到图中时,它给出了“行。 name=n" 在图中。)但是,我想使用我的示例名称。我用示例名称信息在两个表上尝试了 row.names=1 :

envnames <- read.table("envwithnames.txt", header = TRUE, row.names=1, sep = "\t", dec = ",")
otunames <- read.table("otuwithnames.txt", header = TRUE, row.names=1, sep = "\t", dec = ",")

,以及env/otu/envnames/otunames 的任意组合。cca 在任何情况下都运行良好,但任何绘图命令都产生了

plot.ccarownames <- plot(cca(ccarownames, choices=c(1,2)))
Error in rowSums(X) : 'x' must be numeric

我的第二个问题与此有关:358 个站点分为 6 个组(4x60,2x59)。完整的矩阵将此信息推断为额外的列。由于我无法解决行名问题,无论如何,我更加坚持名义数据。原始矩阵包含第一列(样本名称,数字,但可以轻松转换为名义)和第二列(组标识,名义),然后是生物学观察。

我想拥有什么:

  1. 包含所有六个组的 CCA,每组着色站点。
  2. 仅包含一组数据的 CCA(无需手动构建单个输入表)
  3. 使用我的原始样本名称的 CCA 图。

任何帮助表示赞赏!真的,我从昨天早上开始就一直坚持下去:/

4

1 回答 1

0

我自己使用素食主义者的 cca() 并且我有一些你自己的问题,但是我至少能够解决你原来的“行名”问题。我正在对来自 41 个土壤、334 个物种和 39 个环境因素的数据进行 CCA 分析。在我的情况下,我使用

rownames(MyDataSet) <- MyDataSet$ObservationNamesColumn

(为了示例,我使用了默认名称,例如 MyDataSet)但是我仍然有不是数字的环境因素(例如土壤质地)。您可以尝试检查非数字因素,以防您在原始数据集中有错误或因任何其他原因未被解释为数字的非生物因素。为此,您可以使用该命令str(MyDataSet)告诉您每个变量的性质,或者lapply(MyDataSet, class)也可以告诉您相同但输出不同的命令。

如果您有非数字的非生物因素(再次,例如纹理)并且您想删除它们,您可以通过仅使用数字变量创建一个全新的数据集来做到这一点(您仍将保持观察名称原样定义为行名),这很容易做到,可以使用类似的东西来完成:

MyDataSet.num <- MyDataSet[,sapply(MyDataSet, is.numeric)]

这将创建一个新数据集,该数据集具有与原始数据相同的行,但只有具有数值的列(变量)。然后,您应该能够使用这个新数据集继续您的工作。

我对 R 编程和统计学都很陌生(我是一名微生物学家),但我希望这会有所帮助!

于 2014-07-01T15:21:14.907 回答