【问题标题】:mapply with list and vector使用列表和向量映射
【发布时间】:2016-06-02 17:29:38
【问题描述】:

假设我有一个包含 3 个元素的列表(每个元素都是一个数据框),一个包含 3 个元素的向量,我想对列表的每个元素及其向量中的相应元素应用一个函数。当然我可以用循环来做到这一点,但我试图用mapply对其进行矢量化。这就是我正在做的事情

myList = list(data.frame(x = 1:10), data.frame(x = 1:5), data.frame(x = 6:1))
myVec = c(7, 1, 9)
myFun = function(x, y) {
    x$number = y
    return(x)
} 
res = mapply(myFun, myList, myVec)

res 不是我所期望的:

str(res)
List of 6
 $ : int [1:10] 1 2 3 4 5 6 7 8 9 10
 $ : num [1:10] 7 7 7 7 7 7 7 7 7 7
 $ : int [1:5] 1 2 3 4 5
 $ : num [1:5] 1 1 1 1 1
 $ : int [1:6] 6 5 4 3 2 1
 $ : num [1:6] 9 9 9 9 9 9
 - attr(*, "dim")= int [1:2] 2 3
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:2] "x" "number"
  ..$ : NULL   

我期望的是一个包含三个元素的列表,每个元素都是一个包含两列的数据框,如下所示:

str(expected)
List of 3
 $ :'data.frame':   10 obs. of  2 variables:
  ..$ x     : int [1:10] 1 2 3 4 5 6 7 8 9 10
  ..$ number: num [1:10] 7 7 7 7 7 7 7 7 7 7
 $ :'data.frame':   5 obs. of  2 variables:
  ..$ x     : int [1:5] 1 2 3 4 5
  ..$ number: num [1:5] 1 1 1 1 1
 $ :'data.frame':   6 obs. of  2 variables:
  ..$ x     : int [1:6] 6 5 4 3 2 1
  ..$ number: num [1:6] 9 9 9 9 9 9

我做错了什么?

【问题讨论】:

    标签: r mapply


    【解决方案1】:

    我们可以使用Map

    Map(myFun, myList, myVec)
    

    default SIMPLIFY=FALSE 使用,即

    Map  
    
    function (f, ...)  {
    f <- match.fun(f)
    mapply(FUN = f, ..., SIMPLIFY = FALSE) 
    }
    

    【讨论】:

      【解决方案2】:

      试试这个:

      res = mapply(myFun, myList, myVec, SIMPLIFY = FALSE)
      

      【讨论】:

        猜你喜欢
        • 2022-10-06
        • 2020-02-13
        • 2010-10-05
        • 2019-10-19
        • 2019-12-26
        • 2020-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多