我有一个数据帧(df)如下:
Year PlotNo HabitatType Sp1 Sp2 Sp3 Sp4
2000 1 GH 0 1 2 3
1988 3 KL 2 3 4 5
其中,Sp
代表Species,其列代表丰度值。
我试图找到数据帧中每行的Simpson多样性。我尝试了以下循环:
require(vegan)
y <- for(i in 1:nrow(df)) {
row <- df[i,4:50] #Assuming 50 columns
diversity(row, "simp")
}
但是,我一直遇到如下错误:
sum(x)中的错误:参数
的'type'(字符)无效
有关如何更正此错误的任何想法?或任何其他方式来解决这个问题?
答案 0 :(得分:2)
diversity
确实需要数字数据,这可能是你的问题。你从sum(df[,4:50])
得到了什么?
另一个问题是你不需要for()
循环:当给定数据框或矩阵时,diversity
将计算每行(或列,如果你设置参数{{1)的索引}})。如果您的数据是数字的,那么MARGIN = 2
应该这样做。
答案 1 :(得分:0)
diversity
函数只能处理数值数据。可能df[i,4:50]
包含非数字元素。我的猜测是,有些列是character
或factor
。但是,如果没有可重复的例子,我无法确认是否属实。
答案 2 :(得分:0)
我们可以使用:
library(data.table)
mydf <- setDF(mydf)
res <- mydf[, div := diversity(mydf[, 4:7], 'simp')]
这会为每一行添加一个列div
,其结果为diversity
。