1

我试图将一个简单的公式y~x应用于函数,在这种情况下adonis {vegan},当在内部mapply但我得到Error: object of type 'symbol' is not subsettable

我正在运行:mapply(adonis, formula=dist_list~group_list, data=group_list, SIMPLIFY=F),其中 dist_list 是 dist 类中的距离矩阵列表,而 group_list 是因子列表。这同样适用于单个 dist 和 factor 对象。这也有效:mapply(betadisper, d = dist_list, group = group_list, SIMPLIFY=FALSE).

所以问题似乎出在使用formulainside mapply。我一直在尝试使用,substitute但最终还是遇到了同样的错误。

这是提供可重现示例的尝试:

data(varespec)

dis <- vegdist(varespec, method="bray")
dis1 <- vegdist(varespec,method="jaccard")
dis2 <- vegdist(varespec,method="mountford")

dist_list <- list(dis,dis1,dis2)

groups <- factor(c(rep(1,16), rep(2,8)), labels = c("grazed","ungrazed"))
groups1 <- factor(c(rep(1,10), rep(2,14)), labels = c("grazed","ungrazed"))
groups2 <- factor(c(rep(1,20), rep(2,4)), labels = c("grazed","ungrazed"))

group_list <- list(groups,groups1,groups2)

mapply(adonis, formula=dist_list~group_list, data=group_list, SIMPLIFY=F)

#Error: object of type 'symbol' is not subsettable

任何解决此问题的指针将不胜感激,谢谢!

4

2 回答 2

1

使用时需要使用MoreArgs参数来传递额外的参数。请参阅文档。类似(未经测试):adonismapplymapply

mapply(
  adonis, group_list=group_list, dist_list=dist_list, 
  MoreArgs=list(formula=dist_list~group_list), 
  SIMPLIFY=F
)

否则mapply将尝试循环遍历您的公式,因为它是一个列表/向量,这就是导致错误的原因。

于 2014-03-17T15:37:38.260 回答
1

这似乎有效

mapply(function(x,y) adonis(x~y), dist_list, group_list, SIMPLIFY=FALSE)
于 2014-03-17T15:55:39.783 回答