Заменить a на l oop (который изменяет объект) функцией purrr? - PullRequest
1 голос
/ 13 июля 2020

Я работаю с более сложной версией этого кода, которая включает for l oop.

На каждом шаге l oop объект text изменяется , на основе двух значений в кадре данных regex.

Есть ли способ заменить это изменение for l oop вызовом purrr::walk2 или чем-то подобным?

library(tidyverse)

text <- "apple, orange, spinach"
regex <- tibble::tibble(
  find = c("[Aa]pples?", "[Oo]ranges?", "[Ss]pinach"),
  replace = c("fruit", "fruit", "vegetable")
)

# can this loop be replaced with purrr::walk2 or something like that?
for (i in 1:nrow(regex)) {
  text <- str_replace(text, regex$find[ i ], regex$replace[ i ])
}

# > text
# [1] "fruit, fruit, vegetable"

Я прочитал этот вопрос: Как заменить модификацию для l oop на purrr - но я не могу применить решение здесь.

Ответы [ 2 ]

3 голосов
/ 13 июля 2020

Вот подход с walk2:

library(purrr)
walk2(.x = regex$find, .y = regex$replace,
      .f = ~assign("text", str_replace(text, .x, .y), envir = globalenv()))
text
#[1] "fruit, fruit, vegetable"

Я согласен с @MartinGal, однако, что альтернативный подход, вероятно, лучший план.

1 голос
/ 13 июля 2020

Это не то, о чем вы просили, но в этом случае я рекомендую

unique(str_replace_all(text, regex$find, regex$replace))

, который возвращает

[1] "fruit, fruit, vegetable"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...