【问题标题】:Consistent method to add id column to list elements将 id 列添加到列表元素的一致方法
【发布时间】:2020-01-13 11:29:32
【问题描述】:

我无法使用mapply 将 ID 列添加到列表(在更大的函数中)。

对于大多数列表,下面的代码都可以正常工作...

m1 <- matrix(data = 1:32, nrow = 8, ncol = 4)
m2 <- matrix(data = 1:8, nrow = 2, ncol = 4)
m3 <- matrix(data = 1:16, nrow = 4, ncol = 4)
m4 <- matrix(data = 1:4, nrow = 1, ncol = 4)
colnames(m1) <- colnames(m2) <- colnames(m3) <- colnames(m4) <- LETTERS[1:4]

a <- list(m1, m2, m3, m4)
mapply(cbind, a, m = 1:4)
# [[1]]
#      A  B  C  D m
# [1,] 1  9 17 25 1
# [2,] 2 10 18 26 1
# [3,] 3 11 19 27 1
# [4,] 4 12 20 28 1
# [5,] 5 13 21 29 1
# [6,] 6 14 22 30 1
# [7,] 7 15 23 31 1
# [8,] 8 16 24 32 1
# 
# [[2]]
#      A B C D m
# [1,] 1 3 5 7 2
# [2,] 2 4 6 8 2
# 
# [[3]]
#      A B  C  D m
# [1,] 1 5  9 13 3
# [2,] 2 6 10 14 3
# [3,] 3 7 11 15 3
# [4,] 4 8 12 16 3
# 
# [[4]]
#      A B C D m
# [1,] 1 2 3 4 4

但是当我的列表包含相同维度的矩阵时,不再返回列表...

a <- list(m2, m2, m2, m2)
mapply(cbind, a, m = 2)
#       [,1] [,2] [,3] [,4]
#  [1,]    1    1    1    1
#  [2,]    2    2    2    2
#  [3,]    3    3    3    3
#  [4,]    4    4    4    4
#  [5,]    5    5    5    5
#  [6,]    6    6    6    6
#  [7,]    7    7    7    7
#  [8,]    8    8    8    8
#  [9,]    2    2    2    2
# [10,]    2    2    2    2

我找不到任何解释为什么会发生这种情况或可能的解决方法(输出将是与上面第一个示例格式相似的列表)?

【问题讨论】:

  • 这就是mapplyMapMap(cbind, a, m = 2)的区别。 mapply 默认有 simplify = TRUE 参数
  • @RonakShah 啊完美!非常感谢!

标签: r list purrr mapply


【解决方案1】:

这正是mapplyMap之间的区别,mapply默认有simplify = TRUE参数,这意味着

SIMPLIFY - 逻辑或字符串;尝试将结果简化为向量、矩阵或更高维数组;请参阅 sapply 的简化参数。

因此,在这种情况下,要获得与第一个示例相同的输出,我们应该使用Map

Map(cbind, a, m = 2)

#[[1]]
#     A B C D m
#[1,] 1 3 5 7 2
#[2,] 2 4 6 8 2

#[[2]]
#     A B C D m
#[1,] 1 3 5 7 2
#[2,] 2 4 6 8 2

#[[3]]
#     A B C D m
#[1,] 1 3 5 7 2
#[2,] 2 4 6 8 2

#[[4]]
#     A B C D m
#[1,] 1 3 5 7 2
#[2,] 2 4 6 8 2

【讨论】:

    猜你喜欢
    • 2019-04-27
    • 2019-07-08
    • 2014-06-16
    • 1970-01-01
    • 2019-04-06
    相关资源
    最近更新 更多