【问题标题】:Assigning string to purrr::pluck function将字符串分配给 purrr::pluck 函数
【发布时间】:2021-03-31 11:29:34
【问题描述】:

我正在尝试为 purrr::pluck() 编写一个辅助函数来 enframe() 代码,但我正在努力解决如何正确传递 pluck 调用。

这是我试图放入函数的书面代码示例。

json_data %>%
    purrr::pluck("Leagues", 1, "Events") %>%
    enframe(name = NULL, value = "data")

这里是函数

get_tibble <- function(data, pluck, name = NULL, value = "value") {
  clean_tibble <- data %>%
    purrr::pluck(pluck) %>%
    enframe(name = name, value = value)

  return(clean_tibble)
}

但是当我将 c("Leagues", 1, "Events") 传递给 pluck 函数时,它不起作用。它看起来像它,因为当它通过数字 1 时它正在引用它,但我不知道如果没有它如何通过它。

举个例子

    get_tibble <- function(data, pluck, name = NULL, value = "value") {
      clean_tibble <- data %>%
        purrr::pluck(pluck) %>%
        enframe(name = name, value = value)
      
      return(clean_tibble)
    }
    
    json_data <- list(
      ResponseTime = "0s",
      OddsType = "american",
      Leagues = list(
        list(
          LeagueId = 889,
          SportID = 15,
          IsLive = FALSE,
          HasLiveLines = FALSE,
          Events = list(
            data = NULL
          ),
          EventCount = 1
        )
      )
    )
    
    ##This works
clean_tibble <- json_data %>%
      purrr::pluck("Leagues", 1, "Events") %>%
      enframe(name = NULL, value = "data")
    
    ##This doesn't
clean_tibble <- json_data %>%
      get_tibble(pluck = c("Leagues", 1, "Events"), 
                 value = "data")

【问题讨论】:

  • 你能展示一个可重现的小例子吗
  • 在示例中尝试粗略。显然没有建立完整的数据集,但希望问题很清楚。
  • 在您提到的第一个示例中,我得到了一个 NULL list。这是你的预期吗
  • 是的,我只是想达到那个水平

标签: r tidyverse purrr


【解决方案1】:

我们可以将参数作为list 而不是向量传递,因为向量只能有一个类型

get_tibble <- function(data, pluck_value, name = NULL, value = "value")  {
           data %>% 
             pluck(!!! pluck_value) %>%
             enframe(name = NULL, value = "data")
            }



json_data %>%
  get_tibble(pluck_value = list("Leagues", 1, "Events"), 
             value = "data")

-输出

# A tibble: 1 x 1
#  data  
#  <list>
#1 <NULL>

注意:输入参数的名称最好与函数名称不同,例如pluck

当我们这样做时

c("Leagues", 1, "Events")
#[1] "Leagues" "1"       "Events" 

注意1 不是整数,它是character,这会产生一个问题,因为它将检查名称为1 的元素,而不是提取第一个元素

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 2021-07-23
    • 2013-04-23
    相关资源
    最近更新 更多