【问题标题】:apply a function from different list in R using sweep function使用扫描函数从 R 中的不同列表中应用一个函数
【发布时间】:2015-02-22 01:00:00
【问题描述】:

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

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

我想从 lista 中取出每一列和 listb 中的 相应列 并应用以下公式:

(lista$k[1]-listb$k[1])/(abs(lista$k[1])+abs(listb$k[1]))
(lista$k[2]-listb$k[1])/(abs(lista$k[2])+abs(listb$k[1]))

"l"重复同样的操作。

我尝试在 R 中使用扫描功能和 Map 如下:

form <- Map(function(x,y) abs(sweep(x,1,y,FUN="-"))/(sweep(abs(x),1,abs(y),FUN="+")),lista,listb)

我收到以下错误,任何帮助将不胜感激

Error in Ops.data.frame(x, aperm(array(STATS, dims[perm]), order(perm)),  : 
  list of length 10 not meaningful

编辑:将 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)

【问题讨论】:

  • 我想知道这样的事情是否适合你listb &lt;- Map(cbind, listb, listb) ; Map(function(x, y) (x - y) / (abs(x) + abs(y)), lista, listb)
  • 谢谢大卫。在扫描功能中将数据帧更改为矩阵能够提供所需的输出。 form &lt;- Map(function(x,y) abs(sweep(as.matrix(x),1,as.matrix(y),FUN="-"))/(sweep(abs(as.matrix(x)),1,abs(as.matrix(y)),FUN="+")),lista,listb)
  • 您可能应该将此作为答案发布并接受它

标签: r list matrix dataframe


【解决方案1】:

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

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)

【讨论】:

    猜你喜欢
    • 2016-08-17
    • 1970-01-01
    • 2012-03-13
    • 2013-06-28
    • 1970-01-01
    • 2021-07-02
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多