使用sweep函数应用R中不同列表中的函数

使用sweep函数应用R中不同列表中的函数,r,list,matrix,dataframe,R,List,Matrix,Dataframe,我有两个列表,每个列表有多个元素,每个元素都是一个数据框。例如 set.seed(1234) k = data.frame(a=rnorm(5,10),b=rnorm(5,10)) l = data.frame(a=rnorm(5,3),b=rnorm(5,3)) lista <- list(k=k,l=l) k = data.frame(x=rnorm(5,20)) l = data.frame(x=rnorm(5,6)) listb <- list(k=k,l=l)

我有两个列表,每个列表有多个元素,每个元素都是一个数据框。例如

set.seed(1234)
k = data.frame(a=rnorm(5,10),b=rnorm(5,10))
l = data.frame(a=rnorm(5,3),b=rnorm(5,3))

lista <- list(k=k,l=l)

k = data.frame(x=rnorm(5,20))
l = data.frame(x=rnorm(5,6))

listb <- list(k=k,l=l)



> lista
$k
          a         b
1  8.792934 10.506056
2 10.277429  9.425260
3 11.084441  9.453368
4  7.654302  9.435548
5 10.429125  9.109962

$l
         a        b
1 2.522807 2.889715
2 2.001614 2.488990
3 2.223746 2.088805
4 3.064459 2.162828
5 3.959494 5.415835


> listb
$k
         x
1 20.13409
2 19.50931
3 19.55945
4 20.45959
5 19.30628

$l
         x
1 4.551795
2 6.574756
3 4.976344
4 5.984862
5 5.064051
“l”
重复相同的步骤

我尝试在R中使用sweep函数和Map,如下所示:

form <- Map(function(x,y) abs(sweep(x,1,y,FUN="-"))/(sweep(abs(x),1,abs(y),FUN="+")),lista,listb)
编辑:将data.frame转换为矩阵能够提供所需的输出

form <- Map(function(x,y) abs(sweep(as.matrix(x),1,as.matrix(y),FUN="-"))/(sweep(abs(as.matrix(x)),1,abs(a‌​s.matrix(y)),FUN="+")),lista,listb)

form在sweep函数中将数据帧更改为矩阵能够提供所需的输出

form <- Map(function(x,y) abs(sweep(as.matrix(x),1,as.matrix(y),FUN="-"))/(sweep(abs(as.matrix(x)),1,abs(a‌​s.matrix(y)),FUN="+")),lista,listb)

form我想知道这样的东西是否适合你
listb谢谢大卫。在扫描函数中将dataframe更改为矩阵能够提供所需的输出<代码>表单您可能应该将此作为答案发布并接受它
form <- Map(function(x,y) abs(sweep(as.matrix(x),1,as.matrix(y),FUN="-"))/(sweep(abs(as.matrix(x)),1,abs(a‌​s.matrix(y)),FUN="+")),lista,listb)
form <- Map(function(x,y) abs(sweep(as.matrix(x),1,as.matrix(y),FUN="-"))/(sweep(abs(as.matrix(x)),1,abs(a‌​s.matrix(y)),FUN="+")),lista,listb)