2015-02-17 70 views
0

我有一个问题打一个错误。这是我尝试执行行:从素食主义者adonis功能不起作用

library(vegan) 
adonis(data = dset, adiv ~ N+P+K) 

它返回一条失败消息:

Error in rowSums(x, na.rm = TRUE) : 
    'x' must be an array of at least two dimensions 

一切似乎是正常的与数据集,因为AOV(数据= DSET,ADIV〜N + P + K)工作得很好。我知道当某些函数删除数据框架尺寸时会出现这样的错误,但在这种情况下我不知道如何解决它。

编辑。添加一段我的数据集。

treatment N P K M adiv 
N 1 0 0 0 0.2059 
P 0 1 0 0 0.20856 
K 0 0 1 0 0.22935 
O 0 0 0 0 0.10729 
NP 1 1 0 0 0.30674 
NK 1 0 1 0 0.30509 
PK 0 1 1 0 0.30606 
NPK+ 1 1 1 1 0.50389 
NPK 1 1 1 0 0.40731 
manure 0 0 0 1 0.2085 

之前,我尝试执行阿多尼斯我治疗转换成数值与因素:

dataset$N <- as.factor(dat$N) 
dataset$P <- as.factor(dat$P) 
dataset$K <- as.factor(dat$K) 
dataset$M <- as.factor(dat$M) 

然后我试图执行的功能和得到的错误。 正如我已经提到的,当我尝试aov()或lm()时,一切正常。

+0

您可以制作一个重现错误的小例子吗? – 2015-02-18 08:22:26

+0

@RomanLuštrik我已经添加了一些附加信息。 – 2015-02-18 15:53:22

回答

4

这是猜测,因为你的问题没有什么可重复的。但是,如果我使用单变量响应,则可能触发类似错误:adonis用于多变量响应,并且可能不适用于单变量响应。可以使用?adonis来阅读adonis帮助页面,它说公式的左侧应该是“不同类型对象(继承自类"dist")或数据框或矩阵”。在我尝试之后,这有助于(但我实在无法重现您的示例):您可以尝试使用lhs as.matrix(Nitrososphaearaceae)dist(Nitrososphaeraceae)

adonis函数实际上是用于多变量响应,并且需要谨慎使用单变量响应。您还应仔细考虑您使用此类模型的不同类型(或距离)。例如,上述两个替代方案会给出不同的结果,因为它们使用不同的相异性度量。我不完全确定使用基于距离的方法(如adonis)具有单变量响应是很有意义的。

+0

使用as.matrix()修复了这个问题。谢谢。 – 2015-02-18 15:59:52