r - 我们可以使用 apply 函数和 BiCopselect 吗?
问题描述
我们可以使用 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 的 u1 和 u2”
解决方案
你可以这样做:
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 一对列。其他参数可以通过...
.
这是一种不需要数据框具有列名的替代方法:
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
}
推荐阅读
- unix - 如何解释“waitpid 函数不等待首先终止的孩子;”?
- javascript - 如何在反应中停止计时器?
- java - 如何将此 unix 纪元字符串“1583388944.0912497”转换为 Java Timestamp 类型?
- python - Python多功能问题
- r - 根据R中前一行的条件将行添加到数据框
- lucene - Lucene 部分:123 与 123 部分与 123 部分
- ios - 无法退出不存在的沙盒帐户 iOS 13.4
- sql - 循环遍历参数表并返回查询结果的并集
- php - PHP7到PHP7.4更新后Apache下载Laravel index.php
- c# - JSON将枚举列表中的枚举值更改回0