【问题标题】:mapply and two listsmapply 和两个列表
【发布时间】:2012-12-29 01:14:14
【问题描述】:

我正在尝试使用 mapply 组合两个列表(A 和 B)。每个元素都是一个数据框。 我正在尝试将 A 中的数据帧绑定到 B 中的相应数据帧。以下返回我想要的组合 1:

num = 10
A<-list()
B<-list()
for (j in 1:num){
    A[[j]] <- as.data.frame(matrix(seq(1:9),3,3))
    B[[j]] <- as.data.frame(matrix(seq(10:18),3,3))
}

combo1<-list()
for (i in 1:num){
    combo1[[i]] <-rbind(A[[i]], B[[i]])  
}

我正在尝试使用 mapply 来做同样的事情,但我无法让它工作:

combo2<-list()
combo2<-mapply("rbind", A, B)

希望有人能帮帮我

【问题讨论】:

  • 在 A 和 B 的规范中使用 seq 也可能有问题。在第一种情况下它是多余的,而在第二种情况下,它看起来会产生误导性的结果。对于向量输入,使用seq_along

标签: r list apply


【解决方案1】:

你很亲密!

## Make this a more _minimal_ reproducible example
A <- A[1:2]
B <- B[1:2]

## Override default attempt to reduce results to a vector, matrix, or other array
mapply("rbind", A, B, SIMPLIFY=FALSE)
# [[1]]
#   V1 V2 V3
# 1  1  4  7
# 2  2  5  8
# 3  3  6  9
# 4  1  4  7
# 5  2  5  8
# 6  3  6  9
# 
# [[2]]
#   V1 V2 V3
# 1  1  4  7
# 2  2  5  8
# 3  3  6  9
# 4  1  4  7
# 5  2  5  8
# 6  3  6  9

【讨论】:

  • 有什么理由引用函数名而不是直接调用函数?即mapply(rbind, A, B, SIMPLIFY=FALSE)
  • @Justin -- 我不知道。 (它们都有效,因为第一个参数由match.fun() 处理。)
猜你喜欢
  • 1970-01-01
  • 2018-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
相关资源
最近更新 更多