Использование map_lgl для изменения новой переменной - PullRequest
1 голос
/ 20 марта 2020

Я создал тиббл:

hex <- c(2,"A","L",5)

needhex <- function(n=1) { sample(hex,n, replace=TRUE)
  }

x <- tibble(hex = map(rep(10,15), needhex))

Соответственно, в нем 15 строк и 10 случайных символов из шестнадцатеричного числа.

Теперь я хочу выяснить, каким образом я могу изменить дополнительный столбец hex_two, который возвращает true, если шестнадцатеричная строка содержит 2 или 5. Вот что у меня есть:


x %>% mutate(hex_two = map_lgl(hex,~if_else(all(. %in% c("2","5")),1,0)))

К сожалению, это не работает и выдает эту ошибку:

Error: Can't coerce element 1 from a double to a logical

Я знаю, что может быть более легкий рабочий процесс, но я специально ищу способ сделать это с помощью map_lgl.

1 Ответ

0 голосов
/ 20 марта 2020

Выход двойной, поэтому вместо map_lgl необходимо map_dbl

library(dplyr)
library(purrr)
x %>%
    mutate(hex_two = map_dbl(hex,~if_else(all(. %in% c("2","5")),1,0)))

Или, если нам нужен логический вывод, нам не нужен if_else

x %>%
   mutate(hex_two = map_lgl(hex, ~ all(. %in% c('2', '5'))))

Также возможно, что сравнение должно быть обратным

x %>%
   mutate(hex_two = map_lgl(hex, ~ all( c('2', '5') %in% .)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...