【问题标题】:cca per groups and row.names每个组和 row.names 的 cca
【发布时间】:2014-06-16 12:24:55
【问题描述】:

我对 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 将站点名称添加到图中时,它给出图中的“row.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 图。

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

【问题讨论】:

  • “如果我使用行名”是什么意思?如果你把它们读到你的桌子上?或者如果你在你的模型中使用它们?这还不清楚。我也不确定您在为小组讨论什么额外的专栏,或者在这种情况下 CCA 究竟是如何“失败”的。请花时间创建reproducible example。此外,在使用默认包之外的函数时,请明确您正在加载哪些库。如果我们能遇到与您相同的错误,我们更有可能提供帮助。
  • 作为 vegan 开发人员之一,我可以非常自信地说这是用户错误,在某个地方,也许在此过程中反复出现。如果您在数据框中适当地设置这些行名,Vegan 将使用这些行名。如果您将这些留在数据对象中,我怀疑即使cca() 也会起作用,因为我们要做的第一件事就是通过as.matrix() 将数据转换为矩阵,因此如果有任何非字符矩阵,您将获得一个字符矩阵。数据框中的数字信息完全。正如 MrFlick 所说,需要一个可重现的示例来进一步研究。
  • 您好,感谢您的快速解答。我应该详细说明:首先我使用了 read.table(x, header=1, sep/dec),其中 x 包括一个带有数字样本名称的列。该列被解释为变量,并且 cca 搞砸了。我试图读取.table(x, header=1, row.names=1, sep/dec, ),我在rowSums(X) : 'x' must be numeric 消息中收到错误消息。生病更新我最初的问题。

标签: r q vegan


【解决方案1】:

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

rownames(MyDataSet) &lt;- MyDataSet$ObservationNamesColumn

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2023-01-16
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多