【问题标题】:Pass pipe output directly to purrr map function将管道输出直接传递给 purrr map 函数
【发布时间】:2020-03-09 14:05:41
【问题描述】:

这个问题与我之前的问题here一致。但是,我尝试将管道调用的输出与purrr 的 map 函数组合到一个管道中。例如:

library(tidyverse)
library(purrr)

my_tbl <- tibble(a = rep(c(0, 1), each = 5),
             b = rep(c(0, 1), times = 5),
             c = runif(10),
             d = rexp(10)) %>%
    mutate_at(vars(1,2), as.factor)

map(names(my_tbl)[-1], ~glm(reformulate(.x, "a"), data = my_tbl, family = "binomial")) %>% summary()

我试过了

my_tbl <- tibble(a = rep(c(0, 1), each = 5),
             b = rep(c(0, 1), times = 5),
             c = runif(10),
             d = rexp(10)) %>%
    mutate_at(vars(1,2), as.factor) %>%
    {map(names(.)[-1], ~glm(reformulate(.x, "a"), data = ., family = "binomial")) %>% summary()}

但我得到了:

Error in eval(predvars, data, env) : 
  invalid 'envir' argument of type 'character'

【问题讨论】:

  • 真的很小,但是 purrr 已经通过加载 tidyverse 加载,所以你不需要明确地这样做。或者,更好的是,只需加载您需要的 tidyverse 包,这样就可以减少开销

标签: r tidyverse purrr


【解决方案1】:

在这种情况下你不需要 purrr:

custom_fun <- function(x) {
  glm(reformulate(names(x)[-1], "a"), data = x, family = "binomial") %>% 
    summary
}

my_tbl <- tibble(a = rep(c(0, 1), each = 5),
                 b = rep(c(0, 1), times = 5),
                 c = runif(10),
                 d = rexp(10)) %>%
  mutate_at(vars(1,2), as.factor) %>% 
  custom_fun()

您可以将 purrr 与以下内容一起使用:

my_tbl <- tibble(a = rep(c(0, 1), each = 5),
                 b = rep(c(0, 1), times = 5),
                 c = runif(10),
                 d = rexp(10)) %>%
  mutate_at(vars(1,2), as.factor) %>% 
  nest(data = everything()) %>% 
  mutate(res = map(data, custom_fun))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    相关资源
    最近更新 更多