Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的第四角点算法_R_Algorithm_Function_Matrix_Package - Fatal编程技术网

R中的第四角点算法

R中的第四角点算法,r,algorithm,function,matrix,package,R,Algorithm,Function,Matrix,Package,这是一个关于R中第四角点算法的问题。它旨在测量三个不同表之间的关系:n个位点(行)的m个环境变量(列)的n x m表(表R),n个位点(行)的p丰度(列)的n x p表(表L),以及s性状(列)的p x s表(表Q)对于p物种(行) fourthcorner函数位于包ade4中 我的三个数据帧都是二进制的(0和1分别表示变量、地点的物种或特征的存在或不存在)。我尝试过用“是”和“否”代替0和1,但都没有成功 以下是我使用的格式中的一些示例矩阵: tabQ Trait1 Trait2 Trai

这是一个关于R中第四角点算法的问题。它旨在测量三个不同表之间的关系:n个位点(行)的m个环境变量(列)的n x m表(表R),n个位点(行)的p丰度(列)的n x p表(表L),以及s性状(列)的p x s表(表Q)对于p物种(行)

fourthcorner
函数位于包
ade4

我的三个数据帧都是二进制的(0和1分别表示变量、地点的物种或特征的存在或不存在)。我尝试过用“是”和“否”代替0和1,但都没有成功

以下是我使用的格式中的一些示例矩阵:

tabQ

Trait1  Trait2  Trait3  Trait4
Sp1 0   1   0   0
Sp2 0   1   0   0
Sp3 1   0   1   0
Sp4 1   0   1   0
Sp5 0   1   0   0
Sp6 0   1   0   0
Sp7 0   0   0   1
Sp8 0   0   0   1
structure(list(Trait1 = c(0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L), Trait2 = c(1L, 
1L, 0L, 0L, 1L, 1L, 0L, 0L), Trait3 = c(0L, 0L, 1L, 1L, 0L, 0L, 
0L, 0L), Trait4 = c(0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L)), .Names = c("Trait1", 
"Trait2", "Trait3", "Trait4"), row.names = c("Sp1", "Sp2", "Sp3", 
"Sp4", "Sp5", "Sp6", "Sp7", "Sp8"), class = "data.frame")
tabR

EnV1    EnV2    EnV3    EnV4
Site1   1   1   1   1
Site2   1   1   0   1
Site3   0   1   0   1
Site4   1   1   1   1
Site5   1   1   0   1
Site6   0   1   0   0
Site7   0   1   0   1
Site8   0   1   0   1
Site9   1   1   1   1
Site10  1   1   0   1
Site11  1   1   1   1
Site12  0   1   0   0
Site13  1   1   0   1
Site14  1   1   0   1
Site15  0   1   0   1
Site16  1   1   0   1
Site17  0   1   0   1
Site18  1   1   1   1
Site19  1   1   0   1
Site20  1   1   0   1
structure(list(EnV1 = c(1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 
1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L), EnV2 = c(1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L), EnV3 = c(1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 
0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L), EnV4 = c(1L, 1L, 1L, 1L, 1L, 
0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L)), .Names = c("EnV1", 
"EnV2", "EnV3", "EnV4"), row.names = c("Site1", "Site2", "Site3", 
"Site4", "Site5", "Site6", "Site7", "Site8", "Site9", "Site10", 
"Site11", "Site12", "Site13", "Site14", "Site15", "Site16", "Site17", 
"Site18", "Site19", "Site20"), class = "data.frame")
tabL

Sp1 Sp2 Sp3 Sp4 Sp5 Sp6 Sp7 Sp8
Site1   1   1   0   0   0   0   0   0
Site2   1   1   0   0   0   0   0   0
Site3   1   1   0   0   0   0   0   0
Site4   1   0   0   0   0   0   0   1
Site5   1   1   0   0   0   0   0   0
Site6   1   0   0   0   1   0   0   0
Site7   1   0   0   0   0   0   0   0
Site8   0   0   0   0   1   0   0   0
Site9   1   0   0   0   0   0   0   0
Site10  1   1   0   0   0   0   0   0
Site11  0   0   1   1   0   0   0   0
Site12  0   0   0   0   0   1   0   0
Site13  1   0   0   0   0   0   0   0
Site14  0   0   0   0   1   0   0   0
Site15  1   1   0   0   0   0   0   0
Site16  1   1   0   0   0   0   0   0
Site17  1   0   0   0   0   0   0   0
Site18  0   0   1   0   0   0   0   0
Site19  1   0   0   0   0   0   0   0
Site20  1   1   0   0   0   0   1   0
structure(list(Sp1 = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 
0L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L), Sp2 = c(1L, 1L, 1L, 
0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 
1L), Sp3 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 
0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L), Sp4 = c(0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
    Sp5 = c(0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 
    1L, 0L, 0L, 0L, 0L, 0L, 0L), Sp6 = c(0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L
    ), Sp7 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L), Sp8 = c(0L, 0L, 0L, 1L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L)), .Names = c("Sp1", "Sp2", "Sp3", "Sp4", "Sp5", "Sp6", 
"Sp7", "Sp8"), row.names = c("Site1", "Site2", "Site3", "Site4", 
"Site5", "Site6", "Site7", "Site8", "Site9", "Site10", "Site11", 
"Site12", "Site13", "Site14", "Site15", "Site16", "Site17", "Site18", 
"Site19", "Site20"), class = "data.frame")
我将这些数据帧从文本文件读入R,并指定第一列是行名称

这是我尝试在矩阵上使用
fourthcorner
函数时遇到的错误:

第四个1=第四个角(tabR、tabL、tabQ、nrepet=1)

应用时出错(sim,2,函数(x)长度(na.省略(x)): 尺寸(X)必须具有正长度

我不明白问题出在哪里,是格式问题吗?如果是,我应该重新格式化其中一个矩阵吗?是哪一个引起了麻烦?或者我可以不使用二进制特征和环境变量来实现这个函数吗?换句话说,我可以通过修改一段代码来解决这个问题,还是不可能使用这个函数来解决这个问题

作为附加信息,我确实给函数的作者发了电子邮件,但不幸的是我没有完全理解他的回复,可能是因为我的R技能还有很多需要改进的地方。如果有帮助,以下是他的回答:

Q可以包含数量或质量特征。在R中,质量性状应编码为因子,以获得适应性统计(即chi2或eta2)。如果将定性变量编码为虚拟变量,则它们将被视为定量变量


非常感谢您的所有见解。

我注意到您的示例仅失败
nrepet
等于一,因此如果您可以使用任何其他正数,您应该可以

但是,如果您确实需要
nrepet=1
,您应该与
ade4
的作者联系,并要求他/她修复
第四角的功能代码。我追溯到错误,发现
fourthcorner
使用
sim=res$tabD[-1,]
调用
as.krandtest
,其中
res$tabD
是带有
nrepet+1
行的矩阵。当
nrepet
=1且从两行矩阵中删除一行时,
R
会自动将生成的一行矩阵转换为向量,但
as.krandtest
函数预期
sim
为矩阵,从而引发错误

这是您的输入数据,以防其他人想回答您的问题:

tabR

EnV1    EnV2    EnV3    EnV4
Site1   1   1   1   1
Site2   1   1   0   1
Site3   0   1   0   1
Site4   1   1   1   1
Site5   1   1   0   1
Site6   0   1   0   0
Site7   0   1   0   1
Site8   0   1   0   1
Site9   1   1   1   1
Site10  1   1   0   1
Site11  1   1   1   1
Site12  0   1   0   0
Site13  1   1   0   1
Site14  1   1   0   1
Site15  0   1   0   1
Site16  1   1   0   1
Site17  0   1   0   1
Site18  1   1   1   1
Site19  1   1   0   1
Site20  1   1   0   1
structure(list(EnV1 = c(1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 
1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L), EnV2 = c(1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L), EnV3 = c(1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 
0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L), EnV4 = c(1L, 1L, 1L, 1L, 1L, 
0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L)), .Names = c("EnV1", 
"EnV2", "EnV3", "EnV4"), row.names = c("Site1", "Site2", "Site3", 
"Site4", "Site5", "Site6", "Site7", "Site8", "Site9", "Site10", 
"Site11", "Site12", "Site13", "Site14", "Site15", "Site16", "Site17", 
"Site18", "Site19", "Site20"), class = "data.frame")
tabL

Sp1 Sp2 Sp3 Sp4 Sp5 Sp6 Sp7 Sp8
Site1   1   1   0   0   0   0   0   0
Site2   1   1   0   0   0   0   0   0
Site3   1   1   0   0   0   0   0   0
Site4   1   0   0   0   0   0   0   1
Site5   1   1   0   0   0   0   0   0
Site6   1   0   0   0   1   0   0   0
Site7   1   0   0   0   0   0   0   0
Site8   0   0   0   0   1   0   0   0
Site9   1   0   0   0   0   0   0   0
Site10  1   1   0   0   0   0   0   0
Site11  0   0   1   1   0   0   0   0
Site12  0   0   0   0   0   1   0   0
Site13  1   0   0   0   0   0   0   0
Site14  0   0   0   0   1   0   0   0
Site15  1   1   0   0   0   0   0   0
Site16  1   1   0   0   0   0   0   0
Site17  1   0   0   0   0   0   0   0
Site18  0   0   1   0   0   0   0   0
Site19  1   0   0   0   0   0   0   0
Site20  1   1   0   0   0   0   1   0
structure(list(Sp1 = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 
0L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L), Sp2 = c(1L, 1L, 1L, 
0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 
1L), Sp3 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 
0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L), Sp4 = c(0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
    Sp5 = c(0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 
    1L, 0L, 0L, 0L, 0L, 0L, 0L), Sp6 = c(0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L
    ), Sp7 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L), Sp8 = c(0L, 0L, 0L, 1L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L)), .Names = c("Sp1", "Sp2", "Sp3", "Sp4", "Sp5", "Sp6", 
"Sp7", "Sp8"), row.names = c("Site1", "Site2", "Site3", "Site4", 
"Site5", "Site6", "Site7", "Site8", "Site9", "Site10", "Site11", 
"Site12", "Site13", "Site14", "Site15", "Site16", "Site17", "Site18", 
"Site19", "Site20"), class = "data.frame")
tabQ

Trait1  Trait2  Trait3  Trait4
Sp1 0   1   0   0
Sp2 0   1   0   0
Sp3 1   0   1   0
Sp4 1   0   1   0
Sp5 0   1   0   0
Sp6 0   1   0   0
Sp7 0   0   0   1
Sp8 0   0   0   1
structure(list(Trait1 = c(0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L), Trait2 = c(1L, 
1L, 0L, 0L, 1L, 1L, 0L, 0L), Trait3 = c(0L, 0L, 1L, 1L, 0L, 0L, 
0L, 0L), Trait4 = c(0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L)), .Names = c("Trait1", 
"Trait2", "Trait3", "Trait4"), row.names = c("Sp1", "Sp2", "Sp3", 
"Sp4", "Sp5", "Sp6", "Sp7", "Sp8"), class = "data.frame")

哇,我想可能是那样的傻事。但我从没想过这会是重复的次数。我只有一个很低的数字,这样我就可以在没有模拟运行数小时的情况下进行调试。这确实有效,谢谢你。