在 purrr 地图输入中混合位置和名称
Mixing position and names in purrr map input
purrr::map
函数提供了一些选择列表元素的快捷方式:您可以通过提供整数来使用位置,或者通过提供字符串来使用名称。一个示例 here 表明您可以使用向量来处理嵌套的列表元素。例如,
library(purrr)
library(repurrrsive) #includes example list data
gh_repos %>% map_chr(., c(1, 3))
在每个第一个位置内导航以检索和 return 第三个列表元素。
然而,当我尝试使用位置和名称混合输入时,return出现错误:
gh_repos %>% map_chr(., c(1, "full_name"))
#Error: Result 1 is not a length 1 atomic vector
语法可以用其他几种方式表示 return 相同的结果:
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"))
最后一个选项是我的一个发现,它可以处理混合输入。我认识到混合矢量化输入具有不同的 class,因为它包含字符。这是它产生错误的原因吗?我可以进行哪些更改以使用混合位置和名称输入?
是的,问题是不同的数据类。当您使用 c()
时,所有内容都被强制转换为相同的原子类型。所以 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"
purrr::map
函数提供了一些选择列表元素的快捷方式:您可以通过提供整数来使用位置,或者通过提供字符串来使用名称。一个示例 here 表明您可以使用向量来处理嵌套的列表元素。例如,
library(purrr)
library(repurrrsive) #includes example list data
gh_repos %>% map_chr(., c(1, 3))
在每个第一个位置内导航以检索和 return 第三个列表元素。
然而,当我尝试使用位置和名称混合输入时,return出现错误:
gh_repos %>% map_chr(., c(1, "full_name"))
#Error: Result 1 is not a length 1 atomic vector
语法可以用其他几种方式表示 return 相同的结果:
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"))
最后一个选项是我的一个发现,它可以处理混合输入。我认识到混合矢量化输入具有不同的 class,因为它包含字符。这是它产生错误的原因吗?我可以进行哪些更改以使用混合位置和名称输入?
是的,问题是不同的数据类。当您使用 c()
时,所有内容都被强制转换为相同的原子类型。所以 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"