在两个相似的列表上应用会产生两种不同的结

时间:2014-11-23 02:00:20

标签: r function sapply

我创建了一个函数来计算一个名为“参与系数”的值,并用一个短列表测试了这个函数,就像这样

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

1 个答案:

答案 0 :(得分:0)

在这个特定的实例中,发生的是子命令

outmod<-as.data.frame(table(subset(m2$moduleId.x,(m2$A2==auth | m2$A1==auth) & m2$moduleId.y!=m2$moduleId.x)))

返回一个空集,这导致表函数出现问题。我必须在函数中添加一个条件语句来防止这种可能性。