我对R编码的更高级部分仍然相当新,并希望帮助制作循环。
我有多个数据帧,我需要在每个数据帧上执行重复功能。
Df1 <- data.frame(Col_1=c("A","B","C"), Col_2=c(1:3))
Df2 <- data.frame(Col_1=c("D","E","F"), Col_2=c(4:6))
Df3 <- data.frame(Col_1=c("G","H","I"), Col_2=c(7:9))
Df4 <- data.frame(Col_1=c("J","K","L"), Col_2=c(10:12))
DfList <- list(Df1,Df2,Df3,Df4)
因此数据框具有以下格式
>print(Df1)
Col_1 Col_2
1 A 1
2 B 2
3 C 3
有问题的功能需要2个输入(列表中包含2个不同的数据帧:Dflist
example_function <- function(Dataframe_x,Dataframe_y){
X_Sum_col_2 <- sum(Dataframe_x$Col_2)
Y_Sum_col_2 <- sum(Dataframe_y$Col_2)
ratio <- X_Sum_col_2/Y_Sum_col_2
}
>print(example_function(Df1,Df2))
0.4
我的目标是使用example_function循环遍历所有可能的DfList比较,以产生具有结果的数据帧,类似于相似性矩阵。像这样:
Df1 Df2 Df3 Df4
Df1 1 2.5 4 5.5
Df2 0.40 1 1.6 2.2
Df3 0.25 0.63 1 1.38
Df4 0.18 0.45 0.73 1
每当我尝试这个时,它要么告诉我我没有分配第二个变量(不知道怎么做):
>lapply(DfList,function(Dataframe_x,Dataframe_y){
X_Sum_col_2 <- sum(Dataframe_x$Col_2)
Y_Sum_col_2 <- sum(Dataframe_y$Col_2)
ratio <- X_Sum_col_2/Y_Sum_col_2
})
Error in FUN(X[[i]], ...) :
argument "Dataframe_y" is missing, with no default
或者它在尝试for循环时给出了这个错误:
>for(i in 1:4(DfList)){
example_function(i,i)
}
Error: attempt to apply non-function
关于这个问题的任何和所有帮助表示赞赏。谢谢
我们可以使用nested
循环
res <- sapply(DfList, function(x) sapply(DfList, function(y) example_function(x, y)))
nm1 <- paste0("Df", 1:4)
dimnames(res) <- list(nm1, nm1)
round(res, 2)
# Df1 Df2 Df3 Df4
#Df1 1.00 2.50 4.00 5.50
#Df2 0.40 1.00 1.60 2.20
#Df3 0.25 0.62 1.00 1.38
#Df4 0.18 0.45 0.73 1.00