В общем случае оператор !!
работает только в тех функциях, которые поддерживают квазиквакация .К сожалению, rvest::html_nodes
в настоящее время нет.(Но так как это часть tidyverse, я не удивлюсь, если поддержка будет добавлена позднее.)
Существует несколько способов программно предоставить аргументы для вызова функции, включая do.call()
из базыR. Однако, учитывая, что вы используете map
для обхода своей страницы, я рекомендую предварительно установить аргумент css
или xpath
от html_nodes
до purrr::partial()
:
page_parser <- function(dat_list, path = NULL, css = FALSE, attr = "") {
# make css or xpath argument for html_nodes
if (css == TRUE) {
f_html_nodes <- purrr::partial( html_nodes, css = path )
}else{
f_html_nodes <- purrr::partial( html_nodes, xpath = path )
}
# extract attribute value
map(dat_list, possibly(function(x) { f_html_nodes(x) %>% html_attr(attr) %>%
extract(1)}, NA)) %>%
map(1) %>% lapply(function(x) ifelse(is_null(x), "", x)) %>%
unlist()
}