Смешивание положения и имен при вводе карты мурлыкания - PullRequest
0 голосов
/ 04 июля 2018

Функция purrr::map предоставляет несколько ярлыков для выбора элементов списка: вы можете использовать позицию, указав целое число, или имя, указав строку. Пример здесь указывает, что вы можете использовать вектор для работы с вложенными элементами списка. Например,

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

Последний вариант был открытием, которое я сделал, которое приближается к смешанным входам. Я признаю, что смешанный векторизованный ввод относится к другому классу, потому что он включает символы. Это причина, по которой он выдает ошибку? Какие изменения я могу сделать, чтобы использовать смешанные позиции и имена?

1 Ответ

0 голосов
/ 04 июля 2018

Да, проблема в разных классах данных. Когда вы используете 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"  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...