首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法访问purr::pmap或purr:map2中输入列表中的字符串元素

无法访问purr::pmap或purr:map2中输入列表中的字符串元素
EN

Stack Overflow用户
提问于 2019-02-06 16:08:18
回答 2查看 91关注 0票数 0

要将列表的字符串值作为参数访问purr函数,我有一个棘手的问题。

我的目标是连接两个向量的字符串元素的所有排列(用于输出文件名),我将其放入一个输入列表中:

代码语言:javascript
复制
target.labels <- c("Prefix_A", "Prefix_B")
features.sets <- c("Suffix_X", "Suffix_Y")

input.list <- expand.grid(x=target.labels, y=features.sets)

预期结果应该如下所示:

代码语言:javascript
复制
"Prefix_A-Suffix_X" "Prefix_B-Suffix_X" "Prefix_A-Suffix_Y" "Prefix_B-Suffix_Y"

以下是我尝试过的:

代码语言:javascript
复制
library(dplyr)
library(purrr)

fun1 <- function(x,y) { paste0(c(x, y), collapse = "-") }
fun2 <- function(x,y) { paste(x, y, sep = "-") }
fun3 <- function(x,y) { glue::glue("x = {x}, y = {y}") }


input.list %>% pmap_chr(fun1)
## [1] "1-1" "2-1" "1-2" "2-2"

input.list %>% pmap_chr(fun2)
## [1] "1-1" "2-1" "1-2" "2-2

input.list %>% pmap_chr(fun3)
## [1] "x = 1, y = 1" "x = 2, y = 1" "x = 1, y = 2" "x = 2, y = 2"

input.list %>% pmap_chr(~paste(.x, .y, sep = "-"))
## [1] "1-1" "2-1" "1-2" "2-2"

如您所见,purr::pmap函数只检索元素的索引值,而不是字符串值。另一方面,它可能不特定于purr,因为应用函数显示了相同的问题:

代码语言:javascript
复制
mapply(fun1, input.list$x, input.list$y)
## [1] "1-1" "2-1" "1-2" "2-2"

一种预感是,paste0()或pmap()中隐藏的c()函数可以阻止对字符串值的访问--但只能与purr:pmap结合使用,而不是针对purr:map2!

因此,这是可行的:

代码语言:javascript
复制
map2_chr(.x = input.list$x, .y = input.list$y, ~paste(.x, .y, sep = "-"))

## [1] "Prefix_A-Suffix_X" "Prefix_B-Suffix_X" "Prefix_A-Suffix_Y"
## [4] "Prefix_B-Suffix_Y"

我的预感是,这个问题可能与NSE (非标准评估)有关,但我无法理解,因为purr:map2正如预期的那样工作。

我很感激给出一个很好的解释,为什么会发生这种情况--以及如何使它与purr:一起工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-06 16:17:07

基函数expand.grid正在将列转换为因子。由于您已经在使用tidyverse函数,所以使用整洁的等效crossing代替。

代码语言:javascript
复制
input.list <- crossing(x=target.labels, y=features.sets)

那么fun1fun1应该可以正常工作。因素的问题是,它们基本上是存储在R中的整数,所以它们比字符更容易被转换成数字。

票数 1
EN

Stack Overflow用户

发布于 2019-02-06 16:18:53

在这里,如果使用expand.grid,则可以将character列更改为character类,然后使用pmap可以对每一行中的元素进行paste

代码语言:javascript
复制
library(purrr)
input.list <- expand.grid(x=target.labels, y=features.sets, stringsAsFactors = FALSE)
pmap_chr(input.list, paste, collapse="-")
#[1] "Prefix_A Suffix_X" "Prefix_B Suffix_X" "Prefix_A Suffix_Y" "Prefix_B Suffix_Y"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54557857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档