r - 具有 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
任何帮助表示赞赏。
解决方案
在我看来,您的列表很可能被 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)]})})
推荐阅读
- android - 在 android studio 的 kotlin 文本视图中没有换行
- amazon-elastic-beanstalk - 在 bitbucket CI/CD 中添加选项以在部署前删除旧应用程序版本
- docker - 我可以使用 Docker Desktop 管理运行 Docker 的 VPS 吗?
- elasticsearch - Fluentd JSON 日志在 16385 个字符后截断/拆分 - 如何连接?
- html - 在 RenderBody() 内部,引导轮播图像未显示响应
- visual-studio-code - VS Code Editor 字体大小问题
- react-native-android - 如何在 react-native-router-flux 中获取屏幕堆栈
- binary - 为什么可执行文件称为“图像文件”?
- electron - 电子应用程序崩溃
- python - 为什么在使用 Plotly 时数据透视图是一条直线