我正在尝试理解此代码为何起作用:
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帖子,但是我仍然不清楚它可能如何应用..谢谢!
答案 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)
除非我误解了您的问题,否则第二个方法将不起作用,因为a
,b
和c
不是pmap调用环境中附加的列表元素。
如果您将列表元素命名为a
,b
和c
,则可以使用。
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"
您的全局环境中可以有名为a
,b
或c
的对象吗?我收到其他错误消息。
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"