【问题标题】:Mixing position and names in purrr map input在 purrr 地图输入中混合位置和名称
【发布时间】:2018-07-04 17:58:57
【问题描述】:

purrr::map 函数提供了一些选择列表元素的快捷方式:您可以通过提供整数来使用位置,或者通过提供字符串来使用名称。一个示例here 表明您可以使用向量来处理嵌套列表元素。例如,

library(purrr)
library(repurrrsive) #includes example list data
gh_repos %>% map_chr(., c(1, 3))

在每个第一个位置内导航以检索并返回第三个列表元素。

然而,当我尝试使用位置和名称混合输入时,它返回错误:

gh_repos %>% map_chr(., c(1, "full_name"))
#Error: Result 1 is not a length 1 atomic vector

语法可以用其他几种方式表示以返回相同的结果:

gh_repos %>% map_chr(c(1,3)) #Shown above
gh_repos %>% map(1) %>% map_chr("full_name")
gh_repos %>% map_chr(~pluck(.x, 1, "full_name"))

最后一个选项是我发现的一种接近混合输入的方法。我认识到混合矢量化输入属于不同的类别,因为它包含字符。这是它产生错误的原因吗?使用混合位置和名称输入可以进行哪些更改?

【问题讨论】:

    标签: r tidyverse purrr


    【解决方案1】:

    是的,问题在于不同的数据类。当您使用 c() 时,所有内容都会被强制转换为相同的 atomic type 。所以c(1, "full_name") 变成了c("1", "full_name"),这是一个字符向量。第一个列表没有名称为"1" 的命名元素。如果你想在 R 中混合类,你通常使用列表。 map 似乎支持列表。例如

    gh_repos %>% map_chr(list(1, "full_name"))
    # [1] "gaborcsardi/after"   "jennybc/2013-11_sfu" "jtleek/advdatasci"   "juliasilge/2016-14" 
    # [5] "leeper/ampolcourse"  "masalmon/aqi_pdf"  
    

    【讨论】:

      猜你喜欢
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多