为什么函数参数名称需要将列表名称与pmap匹配?

时间:2020-03-31 01:26:11

标签: r purrr

我正在尝试理解此代码为何起作用:

tmp <- list(this = list(1:5), 
            that = list(10*c(1:5)), 
            other = list(100*c(1:5))) 

tmp %>% pmap(function(this, that, other) paste(this, that, other))

...但是以下代码会产生“未使用的参数”错误:

tmp %>% pmap(function(a, b, c) paste(a, b, c))

我遇到了this的GitHub帖子,但是我仍然不清楚它可能如何应用..谢谢!

3 个答案:

答案 0 :(得分:2)

我们可以在没有任何匿名功能的情况下做到这一点

dbaccess

此外,使用library(purrr) library(dplyr) tmp %>% pmap(paste) #[[1]] #[1] "1 10 100" "2 20 200" "3 30 300" "4 40 400" "5 50 500" ,匿名语法可以是

tidyverse

答案 1 :(得分:1)

除非我误解了您的问题,否则第二个方法将不起作用,因为abc不是pmap调用环境中附加的列表元素。

如果您将列表元素命名为abc,则可以使用。

tmp2 <- list(a = list(1:5), 
            b = list(10*c(1:5)), 
            c = list(100*c(1:5))) 

tmp2 %>% pmap(function(a, b, c) paste(a, b, c))
#[[1]]
#[1] "1 10 100" "2 20 200" "3 30 300" "4 40 400" "5 50 500"

您的全局环境中可以有名为abc的对象吗?我收到其他错误消息。

tmp %>% pmap(function(a, b, c) paste(a, b, c))
#Error in .f(this = .l[[1L]][[1L]], that = .l[[2L]][[1L]], other = .l[[3L]][[1L]],  : 
#  unused arguments (this = .l[[1]][[1]], that = .l[[2]][[1]], other = .l[[3]][[1]])

packageVersion("purrr")
#[1] ‘0.3.3’

答案 2 :(得分:1)

如果您具有示例中所示的命名列表,则需要在匿名函数中使用它们各自的名称来引用它们。因此,这适用于命名列表

library(purrr)
tmp %>% pmap(function(this, that, other) paste(this, that, other))

,但事实并非如此。

tmp %>% pmap(function(a, b, c) paste(a, b, c))

如果删除列表的名称,则可以在参数中使用任何变量。

unname(tmp) %>% pmap(function(a, b, c) paste(a, b, c))

#[[1]]
#[1] "1 10 100" "2 20 200" "3 30 300" "4 40 400" "5 50 500"
相关问题