【问题标题】:purrr::lift_vd doesn't work with some functionspurrr::lift_vd 不适用于某些功能
【发布时间】:2020-02-27 18:11:43
【问题描述】:

我有以下数据:

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 的解决方案。

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以这样做:

    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")))
    

    【讨论】:

    • c(...) 在这里做什么?
    猜你喜欢
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多