【问题标题】:using map() in R purrr在 R purrr 中使用 map()
【发布时间】:2019-09-17 18:10:01
【问题描述】:

我正在学习在 purrr 中使用 map() 系列函数,但不明白为什么以下工作...

df <- data.frame(col1 = c(5,4,3), col2=c("a", "b", "c"))

my_f <- function(v1){
      output <- v1 + 1
      return(output)
    }

addone_v <- df$col1 %>%
  map_dbl(my_f)

但如果将map_dbl() 更改为map(),则不会。在后一种情况下,我收到错误:

Error in paste("(^", regions, ")", sep = "", collapse = "|") : 
  cannot coerce type 'closure' to vector of type 'character'

这是一条我不明白的错误消息。

当我不确定我可能得到的输出类型时,我认为 map() 是最安全的使用方法。

【问题讨论】:

  • 你运行的和你展示的一样吗?如所写,我没有收到您提供的错误。也许您没有将结果分配给 addone_v,而是分配给 data.frame 的列?
  • 不清楚错误。 regions 等是什么
  • 您是说df$col1 %&gt;% map(my_f) 返回您粘贴到问题中的错误消息吗?我也无法复制。
  • 我搞砸了命名空间。使用 purrr::map() 时有效
  • 这是一个更好的语法:{df$col1} %&gt;% map(my_f)

标签: r apply tidyverse purrr


【解决方案1】:

如果我们要更新同一列,请在 mutate 中应用函数

library(dplyr)
library(purrr)
df %>%
      mutate(col1 = map_dbl(col1, my_f))

注意:这里可能不需要任何循环 (map)


如果我们在map上应用函数,默认输出是list

df$col1 %>% 
   map(my_f)
#[[1]]
#[1] 6

#[[2]]
#[1] 5

#[[3]]
#[1] 4

【讨论】:

  • 看来我遇到了命名空间问题。当我尝试 purrr::map() 时,我可以得到你的结果
  • @val 可能是您的 ls() 可能具有对象标识符为 map 或具有来自不同包的相同函数名称,例如。来自maps
  • 没错——我在tidyverse 之后加载了maps 包。谢谢
猜你喜欢
  • 1970-01-01
  • 2019-05-11
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
  • 1970-01-01
  • 2019-09-13
  • 2022-01-23
相关资源
最近更新 更多