betadisper函数出错 - 素食包

时间:2017-06-14 17:36:04

标签: r vegan

我正在尝试运行betadisper函数(素食包)并返回错误。这就是我的工作:

hom.cov <- betadisper(morf.dist, sexo)

它向我反复出现了这个错误:

Error in sort.list(y) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?

然后我跑到追溯:

traceback()
5: stop("'x' must be atomic for 'sort.list'\nHave you called 'sort' on   
a list?")
4: sort.list(y)
3: factor(x)
2: as.factor(group)
1: betadisper(morf.dist, sexo)

当我看到这个时,我试图用“as.factor”将因子转换为“sexo”,然后再次运行,但它又向我回复了同样的错误。所以我尝试使用“数字生态与R”中的示例运行“betadisper()”并给我另一个错误:

env <- read.csv("DoubsEnv.csv", row.names=1)
env.pars2 <- as.matrix(env[, c(1, 9, 10)])
env.pars2.d1 <- dist(env.pars2)
(env.MHV <- betadisper(env.pars2.d1, gr))
Error in x - c : arreglos de dimensón no compatibles

traceback()
2: Resids(vectors[, pos, drop = FALSE], centroids[group, pos, drop =   
FALSE])
1: betadisper(env.pars2.d1, gr)

我不知道会发生什么。任何人都可以帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

R 声称sexo不是原子的。这不是最明显的消息,但它意味着sexo不是一个简单的值向量,但它可能是一个数据框或一个列表。问题

str(sexo)

看看你得到了什么。如果您在输出中看到data.framelist等文字,然后是美元符号($),那么您就不会有简单的结构。例如,以下输出不是原子项:

> str(a)
List of 1
  $ a: Factor w/ 4 levels "BF","HF","NM",..: 4 1 NA 4 2 2 2 2 2 1 ...

在这种情况下,您应该使用a$a而不是a