синтаксис purrr и map_depth - PullRequest
       5

синтаксис purrr и map_depth

2 голосов
/ 26 января 2020

Я пытаюсь использовать мурлыканье без использования трубопровода для некоторой согласованности в синтаксисе. Но я сталкиваюсь со следующей проблемой извлечения элементов списка на той же глубине

## Example of a list

Henry_VIII <- list(name="Henry Tudor",DOB=as.Date("28 June 1491", format=("%d %B %Y")),place_of_birth="Palace of Placentia, Greenwich, Kent",
                   DOD=as.Date("28 January 1547", format=("%d %B %Y")),place_of_death="Palace of Whitehall, London")


Catherine_of_Aragon <- list(name="Catherine of Aragon", marriage_date=1509, end_date=1533, end_cause="annulled")
Anne_Boleyn <- list(name="Anne Boleyn", marriage_date=1533, end_date=1536, end_cause="executed")

Henry_VIII <- list(name="Henry Tudor",DOB=as.Date("28 June 1491", format=("%d %B %Y")),place_of_birth="Palace of Placentia, Greenwich, Kent",
                   DOD=as.Date("28 January 1547", format=("%d %B %Y")),place_of_death="Palace of Whitehall, London", marriages=list(Catherine_of_Aragon,Anne_Boleyn))  


sapply(1:length(Henry_VIII$marriages), function(x) Henry_VIII$marriages[[x]]$end_cause) ##works fine

Henry_VIII$marriages %>% map_depth(1,4) ## also works fine

Но, следующее выдает ошибку

purrr::map(Henry_VIII$marriages, c(1,4))

Должен ли я просто использовать трубопровод или есть очевидная синтаксическая ошибка, которую я пропускаю?

Ответы [ 2 ]

1 голос
/ 26 января 2020

Мы можем использовать lapply из base R

lapply(Henry_VIII$marriages, `[[`, 4)
#[[1]]
#[1] "annulled"

#[[2]]
#[1] "executed"

Или, если нам нужен вектор

sapply(Henry_VIII$marriages, `[[`, 4)
1 голос
/ 26 января 2020

Вы не указали функцию, которую нужно применить, т.е.

purrr::map(Henry_VIII$marriages, `[[`, 4)
#Similar to
#purrr::map(Henry_VIII$marriages, ~.x[[4]])

#[[1]]
#[1] "annulled"

#[[2]]
#[1] "executed"

Или, возможно, в этом случае map_chr будет лучше?

purrr::map_chr(Henry_VIII$marriages, `[[`, 4)
#[1] "annulled" "executed"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...