我们可以使用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”
答案 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
}