我正在尝试运行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)
我不知道会发生什么。任何人都可以帮助我吗?
谢谢!
答案 0 :(得分:1)
R 声称sexo
不是原子的。这不是最明显的消息,但它意味着sexo
不是一个简单的值向量,但它可能是一个数据框或一个列表。问题
str(sexo)
看看你得到了什么。如果您在输出中看到data.frame
或list
等文字,然后是美元符号($
),那么您就不会有简单的结构。例如,以下输出不是原子项:
> 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
。