【发布时间】:2019-04-17 18:55:47
【问题描述】:
我正在尝试对安大略省北部的蜜蜂社区进行一些功能多样性分析。我正在使用 R 包 SYNCSA 并尝试计算 Rao 的多样性。不断弹出错误提示“社区数据中的某些物种不在特征矩阵中”。
为了使用函数 rao.diversity 进行分析,我需要制作一个丰度数据表(例如 2 个蜜蜂群落以及其中每个物种的数量)和一个性状表(例如社区及其花粉特异性,筑巢行为等,其中包含我按数字排列的序数数据)。
现在,使用此函数的规则是群落(丰度)数据中列中的物种名称必须与性状数据中行的物种名称完全匹配。当我收到此错误时,我立即确保社区数据的列与特征数据的行匹配,据我所知,它们确实如此。我还尝试了函数organize.syncsa,它应该修复列/行不匹配,只是得到错误消息“comm must contain only numeric or binary variables”。我的通讯(即社区数据)确实只包含数字变量,所以我也不知道我在哪里做错了。
以下分别是我的 2 个社区数据和特征数据表的 ASCII 文本表示:
dput(community.data.raos)
structure(list(X = structure(2:1, .Label = c("Akimiski", "Far North"
), class = "factor"), Andrena.algida = 1:0, Andrena.barbilabris = 1:0,
Andrena.frigida = 1:0, Anthophora.terminalis = 0:1, Bombus.flavidus = c(6L,
0L), Bombus.flavifrons = 2:1, Bombus.frigidus = c(65L, 27L
), Bombus.melanopygus = c(0L, 8L), Bombus.mixtus = 1:2, Bombus.sandersoni = c(21L,
0L), Bombus.sylvicola = c(4L, 17L), Bombus.ternarius = c(5L,
15L), Bombus.terricola = c(8L, 0L), Bombus.vagans = c(9L,
0L), Colletes.americanus = 0:1, Colletes.impunctatus = c(0L,
6L), Colletes.nigrifrons = c(1L, 5L), Halictus.ligatus = c(0L,
2L), Halictus.rubicundus = c(2L, 0L), Halictus.tripartitus = 1:0,
Halictus.virgatellus = c(2L, 12L), Lasioglossum.ephialtum = c(2L,
0L), Lasioglossum.laevissimum = 1:0, Lasioglossum.inconditum = c(5L,
0L), Lasioglossum.quebecense = 1:0, Coelioxys.sodalis = 2:1,
Hoplitis.albifrons = 1:0, Megachile.circumcincta = 0:1, Megachile.frigida = 2:3,
Megachile.gemula = 1:2, Megachile.lapponica = c(1L, 1L),
Megachile.melanophaea = c(0L, 3L), Megachile.montivaga = 1:0,
Megachile.perihirta = c(0L, 3L), Megachile.relativa = 1:2,
Osmia.bucephala = c(1L, 1L), Osmia.laticeps = 1:0, Osmia.nigrifrons = c(2L,
0L), Osmia.nigriventris = c(5L, 1L), Osmia.paradisica = c(0L,
8L), Osmia.tarsata = 1:0, Osmia.tersula = 1:0), class = "data.frame", row.names = c(NA,
-2L))
dput(trait.table.raos)
structure(list(X = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L,
9L, 10L, 11L, 12L, 13L, 14L, 16L, 17L, 18L, 19L, 20L, 21L, 22L,
24L, 26L, 25L, 27L, 15L, 23L, 28L, 29L, 30L, 31L, 32L, 33L, 34L,
35L, 36L, 37L, 38L, 39L, 40L, 41L, 42L), .Label = c("Andrena.algida ",
"Andrena.barbilabris ", "Andrena.frigida ", "Anthophora.terminalis",
"Bombus.flavidus", "Bombus.flavifrons ", "Bombus.frigidus ",
"Bombus.melanopygus ", "Bombus.mixtus", "Bombus.sandersoni ",
"Bombus.sylvicola", "Bombus.ternarius ", "Bombus.terricola ",
"Bombus.vagans ", "Coelioxys.sodalis ", "Colletes.americanus",
"Colletes.impunctatus", "Colletes.nigrifrons", "Halictus.ligatus",
"Halictus.rubicundus", "Halictus.tripartitus", "Halictus.virgatellus ",
"Hoplitis.albifrons ", "Lasioglossum.ephialtum", "Lasioglossum.inconditum",
"Lasioglossum.laevissimum ", "Lasioglossum.quebecense ", "Megachile.circumcincta ",
"Megachile.frigida", "Megachile.gemula", "Megachile.lapponica",
"Megachile.melanophaea", "Megachile.montivaga ", "Megachile.perihirta",
"Megachile.relativa", "Osmia.bucephala", "Osmia.laticeps", "Osmia.nigrifrons",
"Osmia.nigriventris", "Osmia.paradisica ", "Osmia.tarsata", "Osmia.tersula "
), class = "factor"), Pollen.Specificity = c(2L, 2L, 1L, 2L,
0L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 0L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L,
1L, 2L, 2L, 2L, 1L, 2L), Tongue.Length = c(0L, 0L, 0L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L), Sociality = c(1L, 1L, 1L, 1L, 0L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 3L, 2L, 2L, 3L, 3L, 2L,
1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L), Nesting.Behavior = c(0L, 0L, 0L, 2L, 1L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 2L, 1L,
0L, 1L, 1L), Average.Female.ITD = c(NA, NA, NA, NA, 3.64, NA,
3.02, NA, 4.52, 3.21, 3.67, 4.17, 4.14, 3.59, NA, 2.15, 1.97,
NA, 2.21, NA, 1.79, NA, NA, 1.43, NA, NA, NA, NA, 3.14, 3.57,
3.21, 3.24, NA, 3.92, NA, 4, NA, 3.29, 3.86, 3.09, NA, NA)), class = "data.frame", row.names = c(NA,
-42L))
还有一个我遇到的错误示例:
rao.diversity(comm = community.data.raos, traits = trait.table.raos)
Error in rao.diversity(comm = community.data.raos, traits = trait.table.raos) :
There are species from community data that are not on traits matrix
>
rao.diversity 函数应该为每个站点(在我的例子中,有两个这样的站点)生成一系列值介于 0 和 1 之间的小表,指示不同的多样性度量。相反,我收到错误消息“社区数据中的某些物种不在特征矩阵中。”
【问题讨论】:
-
我没有包,但是看Github上的文档和代码,至少你需要去掉
community.data.raos的第一列,X列。您可以将其转换为row.names,或者,如果您想保留信息,使用row.names(community.data.rao) = community.data.rao$X,然后删除带有community.data.rao$X = NULL的列。同样,您需要将trait.table.raos的X列转换为行名。 Look at the top of the function 看看为什么。 -
您可能还需要做一些清理工作。您的特征表中的几个物种名称有尾随空格,例如,
"Bombus.frigidus ",但社区数据的列名没有。trimws()函数将为您修剪空白。 -
我会试试看它是否有效。这些都是好主意。如果问题仍然存在,我将再次发布,如果解决了问题,我将关闭线程。
-
@Gregor,这行得通。现在我只需要弄清楚如何给你投票并将这个问题标记为已回答。
-
很高兴听到这个消息!我不想发布答案,因为我还没有下载要测试的包,但是在您确认后,我会写一个简短的文章,然后您可以接受。今天下午我会努力解决的。
标签: r