r - 将 pmap 列表参数应用于嵌套在另一个函数中的函数

标签 r purrr pmap

我需要在 pmap 变体的帮助下执行一些按行的操作,但是在将参数列表(即“.l”参数)传递给嵌套在另一个函数中的函数。

我尝试了各种方法,包括传递参数名称和点语法,但都无济于事。我需要知道是否有办法做到这一点,因为我需要将其扩展到更复杂的功能。

假设我有以下数据框,我想粘贴每一行的前两列。我可以使用以下代码轻松地做到这一点:

dff <- data_frame(
  first  = c("A", "B"),
  second = c("X", "Y"),
  third  = c("L", "M")
)

df_easy <- dff %>% 
  mutate(joined_upper = pmap_chr(list(first, second), function(...) paste(..., sep = "&")))

df_easy
#> # A tibble: 2 x 4
#>   first second third joined_upper
#>   <chr> <chr>  <chr> <chr>       
#> 1 A     X      L     A&X         
#> 2 B     Y      M     B&Y

但是,如果我想扩展它以便在合并它们之前将前两个字母小写,我的尝试就会失败。我想看看我是否可以获得 dff3。

# df_hard <- dff %>% 
#   mutate(joined_smaller = pmap_chr(list(first, second), function(...) paste(tolower(...), sep = "&")))

dff3 <- data.frame(
  first  = c("A", "B"),
  second = c("X", "Y"),
  third  = c("L", "M"),
  joined_smaller = c("a&X", "b&Y")
)

dff3
#>   first second third joined_smaller
#> 1     A      X     L            a&X
#> 2     B      Y     M            b&Y

最佳答案

这是一个选项。请注意,pastestr_c 是矢量化的,即

library(dplyr)
library(stringr)
dff %>% 
     mutate(joined_sma = str_c(tolower(first), second, sep="&"))

并假设这是一个仅针对 pmap

的练习
library(purrr)    
dff %>%
   mutate(joined_sma = pmap_chr(list(first, second), ~ c(...) %>% 
                {str_c(tolower(first(.)), .[-1], sep="&")}
      ))
# A tibble: 2 x 4
# first second third joined_sma
#  <chr> <chr>  <chr> <chr>     
#1 A     X      L     a&X       
#2 B     Y      M     b&Y       

此外,由于只有两列,我们可以使用约定 .x.y 来调用它们

dff %>%
   mutate(joined_sma = pmap_chr(list(first, second), ~     
       str_c(tolower(.x), .y, sep="&")
  ))

注意:在这里,我们使用 str_c 而不是 paste,因为当存在缺失值时,这可能会有不同的行为 (NA)

关于r - 将 pmap 列表参数应用于嵌套在另一个函数中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57811173/

相关文章:

r - 如果无法安装R软件包,如何使install.packages返回错误?

r - 在嵌套的 tibble R 中重命名数据列时,取消引用无法在 mutate 和 map2 中找到变量

clojure - Clojure 中传感器内的 Pmap

linux - 什么是 linux pmap 输出中的已删除段?

r - 在 R 中使用需要四个向量的函数进行迭代

bash - 使用备用 GCC 构建 R 包

R - 自动创建每日文件以记录来自 RStudio 控制台的所有内容

r - 将 RDS 文件从网络(即 url)直接加载到 R 中?

r - 在 R 中使用 map() rowise

r - 使用 purrr 的 map 时出错,可能