【问题标题】:R - run function by loopR - 循环运行函数
【发布时间】:2021-03-15 15:48:42
【问题描述】:

我有这个数据框

df <- data.frame(nr = seq(1, 200))

假设我有这样的功能

mult <-
  function(x = 1) {
    
    return(
      df %>% 
        mutate(
          result = nr*x,
          x = x
          )
    )
    
  }

有没有更好的方法如何将数字放入 x 参数,比如从 -999 到 999。并将所有内容绑定到单个数据帧?

result <-
  rbind(
    mult(x = 1),
    mult(x = 2),
    mult(x = 3),
    mult(x = 4)
  )

【问题讨论】:

    标签: r loops


    【解决方案1】:

    我们可以使用rbindlist

    library(data.table)
    rbindlist(lapply(1:4, mult))
    

    【讨论】:

      【解决方案2】:

      您可以在设置中使用purrr::map_dfr:

      library(purrr)
      result2 = map_dfr(1:4, mult)
      all.equal(result2, result)
      # [1] TRUE
      

      当然,您可以使用-999:999 代替1:4。

      或者,您可以使用outer(默认情况下会相乘,但您可以指定任何二元运算)代替mult 函数,如下所示:

      result3 <- cbind(df, result = c(outer(df$nr, 1:4)), x = rep(1:4, each = nrow(df)))
      all.equal(result, result3)
      # [1] TRUE
      

      【讨论】:

        猜你喜欢
        • 2015-09-13
        • 1970-01-01
        • 2011-01-31
        • 2012-12-24
        • 2018-12-27
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多