добро пожаловать в SO.
Чтобы выполнить любую задачу несколько раз с помощью кода, вы всегда должны стремиться собрать al oop. Прежде чем вы сможете собрать al oop, вы должны попытаться построить одну итерацию l oop. Вы почти готовы к этому, но есть несколько пропущенных шагов.
Прежде всего, мы должны попытаться обобщить код, чтобы он мог работать, просто переключая значение одной переменной из вашего вектора итераторов. (знаменитости).
person <- "Tom Hanks"
Теперь, используя это, нам нужно создать ссылку на википедию через код. Здесь нужно учесть две вещи:
- Нам нужно добавить ссылку перед именем человека;
- Мы должны заменить пробел в "Томе Хэнксе" на подчеркивание
Мы можем сделать это с помощью этого кода:
link <- paste0("https://en.wikipedia.org/wiki/",
str_replace_all(person, " ", "_"))
Это создает правильную ссылку, которую мы можем использовать для последующих шагов. Теперь это просто вопрос итерации по вектору celebs
. Есть много способов сделать это, но в R наиболее подходящим будет sapply
. Для этого мы создадим анонимную функцию, которая будет принимать имя person
в качестве входных данных, запрашивать википедию и извлекать их день рождения, используя код, который вы уже написали:
function(person) {
link <- paste0("https://en.wikipedia.org/wiki/",
str_replace_all(person, " ", "_"))
wiki <- read_html(link)
birth_date <- wiki %>%
html_nodes(xpath = '//*[@id="mw-content-text"]/div/table/tbody/tr[3]/td/text()') %>%
html_text()
return(birth_date)
}
Теперь вы можете оберните sapply
структуру вокруг этого:
birthdates <- sapply(celebs, function(person) {
link <- paste0("https://en.wikipedia.org/wiki/",
str_replace_all(person, " ", "_"))
wiki <- read_html(link)
birth_date <- wiki %>%
html_nodes(xpath = '//*[@id="mw-content-text"]/div/table/tbody/tr[3]/td/text()') %>%
html_text()
return(birth_date)
})