Map2_df и именованные аргументы - PullRequest
0 голосов
/ 11 марта 2020

Это должно быть похоже на то, что описано здесь

https://github.com/tidyverse/purrr/issues/179

но я бью головой о стену.

Рассмотрим фрагмент


library(tidyverse)
library(stringr)
library(stringi)



remove_short_words <- function(x, n){

mypattern <- paste("\\w{", n, ",}", sep="")

x2 <- paste(str_extract_all(x, mypattern)[[1]], collapse=' ')


}


shopping_list <- c("apples x4", "bag of flour", "bag of sugar", "milk x2")


dd<-map2(shopping_list, 4, function(x,y) remove_short_words(x,y))


ff<-map2_df(shopping_list, 4, function(x,y) remove_short_words(x,y)) 

map2 работает как шарм, но map2_df выдает ошибку

Error: Argument 1 must have names

Есть идеи о том, как это исправить? Спасибо!

#

Я добавляю, что работает для меня. Я использую вспомогательную функцию, которую я подключаю к карте




remove_short_words_aux <- function(x, n){

mypattern <- paste("\\w{", n, ",}", sep="")

x2 <- paste(str_extract_all(x, mypattern)[[1]], collapse=' ')


}



remove_short_words <- function(x,n){


res<-map(x, function(x) remove_short_words_aux(x,n)) %>%
    unlist %>%
    tibble::enframe(name = NULL)



}

> nn<-remove_short_words(shopping_list,5)
> nn
# A tibble: 4 x 1
  value   
  <chr>   
1 "apples"
2 "flour" 
3 "sugar" 
4 ""     


1 Ответ

1 голос
/ 11 марта 2020

Я не совсем понимаю, что вы пытаетесь сделать, но если ваш shopping_list назван, эта ошибка исчезнет:

shopping_list2 <- shopping_list %>% 
  set_names(., shopping_list)

map2_df(shopping_list2, 4, function(x,y) remove_short_words(x,y))

Обратите внимание, что вам не нужен map2 и дополнительный аноним определение функции, если n постоянно. Кроме того, используйте map_dfr или map_dfc (или map2_dfr или map2_dfc), чтобы указать, следует ли объединять данные по строкам или по столбцам.

map_dfr(shopping_list2, remove_short_words, n = 4)
...