purrr :: lift_vd не работает с некоторыми функциями - PullRequest
2 голосов
/ 01 ноября 2019

У меня есть следующие данные:

df_1 <- data.frame(
  x = c(0, 1, 0, 2, 0), 
  y = c(0, 2, 1, 2, 1), 
  z = c(0, 2, 1, 2, 1)
)

И код:

library(tidyverse)

df_1 %>% 
  mutate(var = pmap(., lift_vd(..f = sum, na.rm = TRUE)))

  x y z var
1 0 0 0   0
2 1 2 2   5
3 0 1 1   2
4 2 2 2   6  
5 0 1 1   2

Все нормально. Но когда я хочу сравнить несколько столбцов с if_else, например, эта функция не работает. См .:

df_1 %>% 
  mutate(var = pmap(., lift_vd(..f = if_else(length(unique(.)) == 1, 'ok', 'nok'))))

Ошибка в ..f (c (x = 0, y = 0, z = 0)): не удалось найти функцию "..f"

Что за ошибка? Мне нужно решение только с lift_vd.

1 Ответ

3 голосов
/ 01 ноября 2019

Вы можете сделать:

library(purrr)
library(dplyr)

df_1 %>%
  mutate(var = pmap_chr(., lift_vd(function(x) if_else(n_distinct(x) == 1, "ok", "nok"))))

  x y z var
1 0 0 0  ok
2 1 2 2 nok
3 0 1 1 nok
4 2 2 2  ok
5 0 1 1 nok

Вам на самом деле не нужно lift_vd() здесь, использование c(...) немного более компактно и даст тот же результат:

df_1 %>%
  mutate(var = pmap_chr(., ~if_else(n_distinct(c(...)) == 1, "ok", "nok")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...