我有两个包含多个元素的列表,我想使用这两个列表并应用公式(函数)
作为一个例子,让我们说,我有两个列表A和B,其中包含两个元素x和y(我有1000个元素,例如我们有2个元素x和y)
listA <- list(x=matrix(rnorm(50), nrow=10),
y=matrix(rnorm(50), nrow=10))
listB <- list(x=matrix(rnorm(5), nrow=1),
y=matrix(rnorm(5), nrow=1))
对于每一行,我需要为listA和listB中具有相同元素的每一行应用以下fomualae,并将其保存在相应的列表中,如下所示,列表x和y为2行。我需要为所有rwos和多个列表重新设置它。
#For list X
# for row 1 listA
abs(listA$x[1,]-listB$x[1,])/(abs(listA$x[1,])+abs(listB$x[1,]))
# for row 2 listB
abs(listA$x[2,]-listB$x[1,])/(abs(listA$x[2,])+abs(listB$x[1,]))
#For list Y
# for row 1
abs(listA$y[1,]-listB$y[1,])/(abs(listA$y[1,])+abs(listB$y[1,]))
# for row 2
abs(listA$y[2,]-listB$y[1,])/(abs(listA$y[2,])+abs(listB$y[1,]))
我一直在尝试使用lapply
和mapply
,但到目前为止还没有成功,我们将非常感谢任何帮助。
非常感谢
答案 0 :(得分:3)
使用Map
和sweep
的一次尝试,我认为这会给出预期的结果:
Map(function(x,y) abs(sweep(x,2,y,FUN="-"))/(sweep(abs(x),2,abs(y),FUN="+")),
listA,
listB)
E.g:
listA <- list(x=matrix(1:9, nrow=3),
y=matrix(1:9, nrow=3))
listB <- list(x=matrix(1:3, nrow=1),
y=matrix(4:6, nrow=1))
Map(function(x,y) abs(sweep(x,2,y,FUN="-"))/(sweep(abs(x),2,abs(y),FUN="+")),
listA,
listB)
#$x
# [,1] [,2] [,3]
#[1,] 0.0000000 0.3333333 0.4000000
#[2,] 0.3333333 0.4285714 0.4545455
#[3,] 0.5000000 0.5000000 0.5000000
#
#$y
# [,1] [,2] [,3]
#[1,] 0.6000000 0.11111111 0.07692308
#[2,] 0.3333333 0.00000000 0.14285714
#[3,] 0.1428571 0.09090909 0.20000000
匹配长手计算:
abs(listA$x[1,]-listB$x[1,])/(abs(listA$x[1,])+abs(listB$x[1,]))
#[1] 0.0000000 0.3333333 0.4000000
abs(listA$x[2,]-listB$x[1,])/(abs(listA$x[2,])+abs(listB$x[1,]))
#[1] 0.3333333 0.4285714 0.4545455
abs(listA$y[1,]-listB$y[1,])/(abs(listA$y[1,])+abs(listB$y[1,]))
#[1] 0.60000000 0.11111111 0.07692308
abs(listA$y[2,]-listB$y[1,])/(abs(listA$y[2,])+abs(listB$y[1,]))
#[1] 0.3333333 0.0000000 0.1428571