Можем ли мы использовать функцию применения и 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)

Ошибка будет "пропущены u1 и u2 для BiCopSelect"

1
JJRB 22 Ноя 2018 в 04:06

1 ответ

Лучший ответ

Вы можете сделать что-то вроде этого:

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
 }
0
iod 1 Дек 2018 в 11:15