【发布时间】:2017-12-19 10:04:51
【问题描述】:
我对 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
感谢有关此问题的任何和所有帮助。 谢谢
【问题讨论】:
-
只做一个嵌套的
sapply即sapply(DfList, function(x) sapply(DfList, function(y) example_function(x, y)))
标签: r list function loops dataframe