首页 > 解决方案 > 具有 0 值的 iNEXT

问题描述

我将 iNEXT 应用于以下数据,但出现错误。据我观察,我的数据的组织方式与作者用作示例的蜘蛛数据相同。

dput(corn.list)
 list(A = structure(c("C2_blk1_2014", "   0", "300", "1350", " 150", 
"  0", "   0", "300", "1350", " 150", "  0", "   0", "300", "1350", 
"C2_blk1_2015", "   0", "  0", "1264", " 702", "  0", "   0", 
"  0", "1264", " 702", "  0", "   0", "  0", "1264", "C2_blk1_2016", 
"   0", "  0", "1674", " 913", "  0", "   0", "  0", "1674", 
" 913", "  0", "   0", "  0", "1674", "C2_blk1_2017", "1112", 
"  0", "5423", " 973", "  0", "1112", "  0", "5423", " 973", 
"  0", "1112", "  0", "5423", "C2_blk2_2014", " 142", "  0", 
" 994", " 568", "  0", " 142", "  0", " 994", " 568", "  0", 
" 142", "  0", " 994", "C2_blk2_2015", "   0", "  0", " 305", 
" 611", "  0", "   0", "  0", " 305", " 611", "  0", "   0", 
"  0", " 305", "C2_blk2_2016", "   0", "  0", "2266", "1133", 
"  0", "   0", "  0", "2266", "1133", "  0", "   0", "  0", "2266", 
"C2_blk2_2017", " 131", "  0", "1705", "1049", "  0", " 131", 
"  0", "1705", "1049", "  0", " 131", "  0", "1705", "C2_blk3_2014", 
"   0", "  0", " 834", "   0", "  0", "   0", "  0", " 834", 
"   0", "  0", "   0", "  0", " 834", "C2_blk3_2015", "   0", 
"  0", " 834", " 556", "  0", "   0", "  0", " 834", " 556", 
"  0", "   0", "  0", " 834", "C2_blk3_2016", " 272", "  0", 
"2446", "1223", "  0", " 272", "  0", "2446", "1223", "  0", 
" 272", "  0", "2446", "C2_blk3_2017", "   0", "  0", "3466", 
"1600", "  0", "   0", "  0", "3466", "1600", "  0", "   0", 
"  0", "3466", "C2_blk4_2014", " 136", "  0", "   0", " 272", 
"136", " 136", "  0", "   0", " 272", "136", " 136", "  0", "   0", 
"C2_blk4_2015", "   0", "  0", " 725", " 290", "  0", "   0", 
"  0", " 725", " 290", "  0", "   0", "  0", " 725", "C2_blk4_2016", 
" 136", "136", "2996", "3405", "  0", " 136", "136", "2996", 
"3405", "  0", " 136", "136", "2996", "C2_blk4_2017", "   0", 
"  0", " 958", " 274", "  0", "   0", "  0", " 958", " 274", 
"  0", "   0", "  0", " 958"), .Dim = c(14L, 16L), .Dimnames = list(
c("id", "SETSP", "SOLPT", "SONAR", "AMATA", "MORAL", "POLCO", 
"CHEAL", "DIGSA", "DATST", "ABUTH", "POLPY", "POLPE", "SONAS"
), NULL)), B = structure(c("C4_blk1_2014", "   0", "  0", 
"  966", " 966", "  0", "  0", "  0", "   0", "  0", "  966", 
" 966", "  0", "  0", "C4_blk1_2015", " 935", "  0", " 1247", 
" 779", "  0", "312", "  0", " 935", "  0", " 1247", " 779", 
"  0", "312", "C4_blk1_2016", " 134", "  0", "  668", " 936", 
"  0", "  0", "  0", " 134", "  0", "  668", " 936", "  0", "  0", 
"C4_blk1_2017", "   0", "136", "  819", "1092", "  0", "  0", 
"  0", "   0", "136", "  819", "1092", "  0", "  0", "C4_blk2_2014", 
 " 138", "  0", "  276", " 414", "  0", "  0", "  0", " 138", 
"  0", "  276", " 414", "  0", "  0", "C4_blk2_2015", "   0", 
"  0", "  755", "1962", "302", "  0", "  0", "   0", "  0", "  755", 
"1962", "302", "  0", "C4_blk2_2016", " 144", "432", " 1728", 
" 288", "  0", "  0", "  0", " 144", "432", " 1728", " 288", 
"  0", "  0", "C4_blk2_2017", "   0", "138", "10091", "2626", 
"  0", "  0", "  0", "   0", "138", "10091", "2626", "  0", "  0", 
"C4_blk3_2014", "   0", "272", " 2040", " 136", "  0", "  0", 
"  0", "   0", "272", " 2040", " 136", "  0", "  0", "C4_blk3_2015", 
"1444", "  0", "  289", "   0", "  0", "  0", "  0", "1444", 

"  0", "  289", "   0", "  0", "  0", "C4_blk3_2016", " 407", 
"  0", "    0", " 136", "  0", "  0", "  0", " 407", "  0", "    0", 
" 136", "  0", "  0", "C4_blk3_2017", " 135", "  0", "  812", 
" 812", "  0", "  0", "  0", " 135", "  0", "  812", " 812", 
"  0", "  0", "C4_blk4_2014", "   0", "  0", "  548", " 548", 
"  0", "  0", "  0", "   0", "  0", "  548", " 548", "  0", "  0", 
"C4_blk4_2015", " 723", "  0", "  434", "1592", "  0", "  0", 
"  0", " 723", "  0", "  434", "1592", "  0", "  0", "C4_blk4_2016", 
"   0", "  0", " 1599", " 666", "  0", "  0", "  0", "   0", 
"  0", " 1599", " 666", "  0", "  0", "C4_blk4_2017", " 135", 
"135", " 3781", "1621", "  0", "  0", "135", " 135", "135", " 3781", 
"1621", "  0", "  0"), .Dim = c(14L, 16L), .Dimnames = list(c("id", 
"SETSP", "SOLPT", "SONAR", "AMATA", "MORAL", "POLCO", "CHEAL", 
"DIGSA", "DATST", "ABUTH", "POLPY", "POLPE", "SONAS"), NULL)))

代码 iNEXT(corn.list,q=0,datatype = "abundance")

错误

Error in if (sum(x) == 0) stop("Zero abundance counts in one or more sample sites") : missing value where TRUE/FALSE needed

蜘蛛数据在这里 http://johnsonhsieh.github.io/iNEXT/inst/doc/Introduction.html

任何帮助表示赞赏。

标签: rinext

解决方案


在我看来,您的列表很可能被 R 解释为由字符组成,而不是由数字向量组成。iNEXT 需要您的数据为“数字”类型,这意味着 R 将其中的值理解为数字而不是字符串。查看 R 如何将蜘蛛数据理解为两个命名向量,每个向量只有数值,使用以下str()函数:

 > str(spider)
 List of 2
 $ Girdled: num [1:26] 46 22 17 15 15 9 8 6 6 4 ...
 $ Logged : num [1:37] 88 22 16 15 13 10 8 8 7 7 ...

您的数据被理解为字符串列表,而不是

> str(corn.list)
List of 2

$ A: chr [1:14, 1:16] "C2_blk1_2014" "   0" "300" "1350" ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:14] "id" "SETSP" "SOLPT" "SONAR" ...
.. ..$ : NULL
$ B: chr [1:14, 1:16] "C4_blk1_2014" "   0" "  0" "  966" ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:14] "id" "SETSP" "SOLPT" "SONAR" ...
.. ..$ : NULL

为了节省您的时间,从您的原始数据文件开始并上传它可能会更容易,以便 R 更好地理解结构(我通常使用read.csv())。

可以在 R 中重新格式化它。我开始走这条路,但很快意识到我的粗略代码会删除你的菌株名称并弄乱你的每个“社区”的对齐方式,这是 iNEXT 所需要的。无论如何,我已经在下面粘贴了我的代码,以防它对您作为起点或参考有用。

#first create a function that will convert your data to numeric   
replace_space<-function(strng){as.numeric(gsub(" ", "", strng))}

#then apply the function to every column in each element of your list
cl2<-lapply(corn.list, function(x){sapply(x, replace_space)})

#Things that were legitimate character strings get converted to NA. if you didn't care about them at all, you could remove them: 
cl3<-lapply(cl2, function(x){apply(x,2, function(y){y[complete.cases(y)]})})

推荐阅读