С ?ifelse
ifelse возвращает значение такой же формы, как у теста
Например, см.
ifelse(FALSE, 20, 1:5)
#[1] 1
Какlength(FALSE)
равно 1, выбрано только первое значение 1:5
, равное 1.
Аналогично, когда вы выполняете
ifelse(length(a) == 0, NA, a)
length(length(a) == 0)
равно 1, и, следовательно, толькопервое значение a
возвращается.
В этом случае мы можем использовать if
вместо ifelse
, поскольку у нас есть только один элемент для проверки, потому что
if(FALSE) 20 else 1:5 #returns
#[1] 1 2 3 4 5
Таким образом, он выдаст вам вывод, выполнив
library(tidyverse)
library(rvest)
h %>% map_df(~{
a <- html_nodes(., "#firstHeading") %>% html_text()
b <- html_nodes(., ".toctext") %>% html_text()
a <- if (length(a) == 0) NA else a
b <- if (length(b) == 0) NA else b
tibble(a,b)
})
# a b
# <chr> <chr>
# 1 FC Barcelona History
# 2 FC Barcelona 1899–1922: Beginnings
# 3 FC Barcelona 1923–1957: Rivera, Republic and Civil War
# 4 FC Barcelona 1957–1978: Club de Fútbol Barcelona
# 5 FC Barcelona 1978–2000: Núñez and stabilization
# 6 FC Barcelona The Dream Team era
# 7 FC Barcelona 2000–2008: Exit Núñez, enter Laporta
# 8 FC Barcelona 2008–2012: Guardiola era
# 9 FC Barcelona 2014–present: Bartomeu era
#10 FC Barcelona Support
# … with 78 more rows