我有一个从包含三个原始列的表中导出的矩阵:第 1 列 = 站点代码,第 2 列 = 物种代码,第 3 列 = 每个物种的生物量重量。每个小区中每个物种的生物量重量显示在矩阵中。可以使用以下三个选项之一来计算矩阵(感谢对较早问题的反馈):
reshape::cast(dissimBiom, plot ~ species, value = 'biomass', fun = mean)
by(dissimBiom, dissimBiom$biomass, function(x) with(x, table(plot, species)))
tapply(dissimBiom$biomass,list(dissimBiom$plot,dissimBiom$species),mean)
注意:dissim 是两列表的 .csv 文件名;dissimBiom 是三列表的 .csv 文件名。
我现在想根据上面的矩阵生成一个相异矩阵。下面的代码需要 vegan 和 ecodist 包。
我之前使用过该功能
matrix <- with(dissim, table(plot,species))
仅基于两列(站点与物种)生成矩阵,然后使用
matrix.meta <- metaMDS(matrix, k=2, distance = "bray", trymax=10)
生成相异矩阵。这工作得很好。
相反,尝试生成一个相异矩阵,其中该矩阵是使用以下代码之一生成的(如上)
reshape::cast(dissimBiom, plot ~ species, value = 'biomass', fun = mean)
by(dissimBiom, dissimBiom$biomass, function(x) with(x, table(plot, species)))
tapply(dissimBiom$biomass,list(dissimBiom$plot,dissimBiom$species),mean
使用相同的功能
matrixBiom.meta <- metaMDS(matrixBiom, k=2, distance = "bray", trymax=10)
导致以下错误消息
Error in if (any(autotransform, noshare > 0, wascores) && any(comm < 0)) { :
missing value where TRUE/FALSE needed
注意:我从我编写的文件 matrixBiom.csv 中调用 matrixBiom 来将 NA 转换为 0,使用
write.csv(matrixBiom, "matrixBiom.csv", na="0",row.names=TRUE)
与 matrixBiom.meta 相比,matrix.meta 直接用于 'matrix' 而无需编写 .csv 文件。
此外,由生成的矩阵
matrix <- with(dissim, table(plot,species))
看起来像这样
species
plot xanfla1 xangria xanret
a100f177r 1.4 0 8.9
a100f562r 0 5.6 0
a100f56r 22.4 0 1.3
而由其他任何一种方法生成的矩阵具有格式
zinunk ziz150 zizang
a100f177r 22.4 NA 2.6
a100f562r 1.3 NA NA
a100f56r NA 3.1 NA
a100f5r NA NA 0.2
我的问题是,
1) 在这些函数中的任何一个中
reshape::cast(dissimBiom, plot ~ species, value = 'biomass', fun = mean)
by(dissimBiom, dissimBiom$biomass, function(x) with(x, table(plot, species)))
tapply(dissimBiom$biomass,list(dissimBiom$plot,dissimBiom$species),mean
NA可以直接转换为0以避免在.csv文件中写入和读取,也许这可以解决问题?
2) 哪些修复可用于三列表示例以使用 metaMDS 进行 NMDS?
3) 是否有替代函数来计算三列表示例的相异矩阵?
任何建议将不胜感激。
请在下面找到可重现的数据子集:
> dput(dataframe)
structure(list(plot = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L), .Label = c("a1f17r",
"a1f56r", "a1m17r", "a1m5r"), class = "factor"), species = structure(c(12L,
29L, 16L, 21L, 24L, 19L, 6L, 13L, 14L, 5L, 16L, 12L, 26L, 9L,
29L, 28L, 17L, 15L, 25L, 6L, 3L, 8L, 27L, 6L, 1L, 7L, 18L, 10L,
12L, 11L, 2L, 20L, 13L, 27L, 22L, 23L, 4L, 1L), .Label = c("annunk",
"blurip", "cae089", "caepar", "chrodo", "clihir", "dalpin", "derele",
"embphi", "ficmeg", "indunk", "jactom", "leeind", "merbor", "mergra",
"mikcor", "nep127", "nepbis", "nepbis1", "palunk", "rubcle",
"sinirp", "spagyr1", "sphoos", "stitrut", "tetped", "tinpet",
"uncgla", "zinunk"), class = "factor"), biomass = c(100.6, 284.6,
13.8, 2.8, 1, 3.1, 8.8, 0.5, 15.2, 13.8, 6.1, 5.3, 18.8, 4.1,
199, 68, 143.3, 11.3, 6.5, 0.2, 54.1, 39, 22, 1.2, 6.3, 6, 0.1,
2.8, 42, 1.9, 0.1, 0.2, 0.2, 0.1, 2.1, 4.3, 0.7, 0.2)), .Names = c("plot",
"species", "biomass"), class = "data.frame", row.names = c(NA,
-38L))