我正在尝试使用mapply来替换嵌套循环。
我有一个数据框:
a <-rnorm(20)
b <-rnorm(20)
c <-rnorm(20)
d <-rnorm(20)
e <-rnorm(20)
f <-rnorm(20)
df <- data.frame(a,b,c,d,e,f)
df
我也有一个功能:
fnsum <-function(num1,num2)
{
dsum <- sum(df[,num1],df[,num2])
idx <- names(df[num1])
idy <- names(df[num2])
dsum1 <- data.frame(idx,idy,dsum)
dsum1
return(dsum1)
}
我可以在嵌套循环中使用此函数来获得答案:
len1 <- 6
dsumall <- fnsum(1,2)
for (n in 2:(len1-1)) {
for (m in (n+1):len1) {
dsumall <- rbind(dsumall ,fnsum(n,m))
}
}
dsumall
但我遇到的问题是为适用于任何规模的数据帧的通用解决方案而工作:
dsumall <- mapply(fnsum, n = 1:(len1-1), m = (n+1):len1)
dsumall
我很感激你的帮助。
答案 0 :(得分:2)
试试这个:
num2 <- unlist(mapply(seq,from = 3:6,length.out = 4:1))
dsumall1 <- mapply(fnsum,
num1 = c(1,rep(2:5,times = 4:1)),
num2 = c(2,num2),
SIMPLIFY = FALSE)
do.call("rbind",dsumall1)