在 R 中计算跨站点的多样性指数

Calculating diversity indices across sites in R

我有一个数据框(df)如下:

Year PlotNo HabitatType Sp1 Sp2 Sp3 Sp4
2000   1       GH        0   1   2   3
1988   3       KL        2   3   4   5

其中,Sp 代表物种,其列代表丰度值。

我试图找出数据框中每一行的辛普森多样性。我尝试了以下 for 循环:

require(vegan)
y <- for(i in 1:nrow(df)) {
row <- df[i,4:50] #Assuming 50 columns
diversity(row, "simp")
}

但是我存运行 报如下错误:

Error in sum(x) : invalid 'type' (character) of argument

关于如何更正此错误的任何想法?或者有任何替代方法吗?

diversity函数只能处理数值数据。可能 df[i,4:50] 包含 non-numeric 个元素。我的猜测是某些列是 characterfactor。但是,如果没有可重现的示例,我无法确认情况是否如此。

我们可以使用:

library(data.table)
mydf <- setDF(mydf)
res <- mydf[, div := diversity(mydf[, 4:7], 'simp')]

这会为每一行添加一个列 div,其中包含 diversity 函数的结果。

diversity确实需要数值数据,这可能是你的问题。你从 sum(df[,4:50]) 得到了什么?

另一个问题是您不需要 for() 循环:当给定数据框或矩阵时,diversity 将计算每行(或列,如果您设置参数 MARGIN = 2).所以 diversity(df[,4:50]) 应该可以,前提是您的数据是数字。