我们可以使用Apply功能和BiCopselect吗?

时间:2018-11-22 01:06:40

标签: r apply

我们可以使用Apply功能和BiCopselect吗?我试图避免在应用BiCopselect时出现循环,但我还没有弄清楚。假设我有3个变量的数据集,并且我想为每对运行此函数。除了循环以外,谁能建议其他方法?

这是我手动完成的方式

coptest12=BiCopSelect(rankresi[,1], rankresi[,2], familyset = NA)
coptest13=BiCopSelect(rankresi[,1], rankresi[,3], familyset = NA)
coptest14=BiCopSelect(rankresi[,1], rankresi[,4], familyset = NA)
coptest15=BiCopSelect(rankresi[,1], rankresi[,5], familyset = NA)
coptest23=BiCopSelect(rankresi[,2], rankresi[,3], familyset = NA)
coptest24=BiCopSelect(rankresi[,2], rankresi[,4], familyset = NA) 
coptest25=BiCopSelect(rankresi[,2], rankresi[,5], familyset = NA) 

,依此类推,直到最后一个代码:

    coptest45=BiCopSelect(rankresi[,4], rankresi[,5], familyset = NA) 

我只是尝试使用apply函数,但似乎不太可能使用

sapply(rankresi, BiCopSelect)

错误将为“ BiCopSelect的uminig u1和u2”

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

myfunc<-function(df1,...) {
  pairs<-combn(names(df1),2,simplify=FALSE)
  res<-sapply(pairs,function(x) BiCopselect(df1[,x[1]],df1[,x[2]],...))
  res
}

result<-myfunc(rankresi)

此函数采用数据帧的名称,然后一次传递给BiCopselect一对列。其他参数可以通过...传递给BiCopselect。

这是一种替代方案,不需要数据框具有列名:

myfunc<-function(df1,...) {
    pairs<-combn(c(1:ncol(df1)),2,simplify=FALSE)
    res<-sapply(pairs,function(x)  BiCopselect(df1[,x[1]],df1[,x[2]],...))
    res
  }

最后,相同的解决方案,但是行而不是列的组合:

myfuncbyrow<-function(df1,...) {
  pairs<-combn(c(1:nrow(df1)),2,simplify=FALSE)
 res<-sapply(pairs,function(x) BiCopselect(df1[x[1], ],df1[x[2], ],...))
 res
 }