2014-06-16 26 views
0

我对R有点新,所以原谅我的基本问题。我在一个完整的数据集上(358个位点,40个非生物参数,100个观察物种)进行了一个CCA。cca每组和row.names

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图。

任何帮助表示赞赏!真的,我从昨天早上就卡住了:/

+0

你是什么意思“如果我使用行名”?如果你把它们读入你的桌子?或者如果你在你的模型中使用它们?这不清楚。我也不确定你在讨论什么额外的专栏,或者CCA在这种情况下“失败”。请花时间创建一个[可重现的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。在使用默认软件包之外的功能时,请清楚您正在加载哪些库。如果我们能像你一样获得同样的错误,我们更有可能提供帮助。 – MrFlick

+0

作为**素食**开发者之一,我可以非常自信地说这是用户错误,可能在某个地方,或许反复,一路上。如果您在数据框中正确设置这些行,素食主义者将使用行名称。如果将这些数据保留在数据对象中,我怀疑即使'cca()'也会工作,因为我们所做的第一件事之一是通过'as.matrix()'将数据转换为矩阵,因此您会得到一个字符矩阵如果在你的数据框*中有任何非数字信息*。正如弗里克先生所说,需要一个可重复的例子来进一步研究这一点。 –

+0

您好,感谢您的快速回答。我应该使用elobarate:首先我使用read.table(x,header = 1,sep/dec),其中x包含一个带数字样本名称的列。这一列被解释为一个变量,并且cca变得混乱了。我尝试read.table(x,header = 1,row.names = 1,sep/dec),并且我在'rowSums(X)中得到错误:'x'必须是数字'消息。虐待更新我最初的问题。 – nouse

回答

0

我使用cca()从纯素我自己和我有一些自己的问题,但我至少能够解决您的原始“行名称“问题。我正在对来自41个土壤的数据进行CCA分析,共有334个物种和39个环境因素。 在我来说,我使用

rownames(MyDataSet) <- MyDataSet$ObservationNamesColumn

(我用的默认名称,如MyDataSet例如这里的缘故) 但是我仍然有哪些不是数字环境因素(如土壤质地)。您可以尝试检查非数值因素,以防您原始数据集中存在错误,或者因为任何其他原因而将非生物因素解释为数字。要做到这一点,你可以使用命令str(MyDataSet),它告诉你每个变量的性质,或者lapply(MyDataSet, class),它也告诉你相同但是在不同的输出中。

如果您的非生物因素不是数值(又如纹理),并且您想要删除它们,您可以通过仅使用数值变量创建一个全新的数据集来实现这一点(您仍然可以保持观察名字,因为他们被定义为列名),这是相当容易的事情,并且可以使用类似于这样做:

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

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

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