我创建了一个函数来计算一个名为“参与系数”的值,并用一个短列表测试了这个函数,就像这样
testList<-c(568120,711503,1077594)
testResults<-(sapply(testList, function(x) participationCoefficient(x)))
这给了我:
> testResults
[,1] [,2] [,3]
[1,] 568120.0000000 711503.0000000 1077594.0000000
[2,] 0.7333333 0.8780488 0.4166667
现在,当我尝试从其他来源创建列表时
>authList<-moduleCalcs[[x]]$authId
> authList[1:5]
[1] 548114 553928 553929 556071 559044
并使用apply函数
> testResults<-(sapply(authList, function(y) participationCoefficient(y)))
我得到了
Error in provideDimnames(x) : length of 'dimnames' [1] not equal to array extent Called from: top level
所以我尝试发送一个缩短的authList,但我仍然得到相同的错误。我对这里发生的事情感到有点困惑。
此外,这是函数的代码,如果有必要的话
participationCoefficient<-function(auth){
outmod<-as.data.frame(table(subset(m2$moduleId.x,(m2$A2==auth | m2$A1==auth) & m2$moduleId.y!=m2$moduleId.x)))
deg<-nrow(subset(m2,m2$A1==auth | m2$A2==auth))
partcoef<-1-(Reduce("+",(outmod$Freq/deg)))
answer<-c(auth,partcoef)
rm(deg,outmod,partcoef)
return(answer)
}
有关为何会发生这种情况的任何想法?
修改
以下是一些可用于m2的数据。我不确定这是否是分享它的最佳方式。如果没有,请告诉我是否有其他方式。
authList
[1] 548114 553928
A2 A1 moduleId.x moduleId.y
1013122 553928 1 1
1066822 548114 1 1
548114 722690 1 1
548114 666417 1 1
548114 854300 1 1
548114 842554 1 1
548114 991715 1 1
553928 710558 1 1
553928 767591 2 1
553928 718371 1 1
553928 649043 1 1
553928 601167 1 1
553928 637192 2 1
553928 710304 1 1
553928 559044 1 1
563965 553928 1 1
571821 553928 1 1
661623 553928 1 1
682197 553928 1 1
682886 553928 1 1
683583 553928 1 1
712141 553928 1 1
716224 553928 1 1
723022 553928 1 1
851338 553928 1 1
934132 553928 1 1
995296 553928 1 1
答案 0 :(得分:0)
在这个特定的实例中,发生的是子命令
outmod<-as.data.frame(table(subset(m2$moduleId.x,(m2$A2==auth | m2$A1==auth) & m2$moduleId.y!=m2$moduleId.x)))
返回一个空集,这导致表函数出现问题。我必须在函数中添加一个条件语句来防止这种可能性。