#r #string #for-loop #nonsequential
#r #строка #цикл for #непоследовательный
Вопрос:
Вероятно, это простой вопрос, но я изо всех сил пытаюсь найти способ выполнить эквивалент «для (i в 1: 10) { do something}», но со списком строк. Например:
задан список строк a = («Джо», «Джон», «Джордж») Я бы хотел сделать следующее:
for (a in "Joe":"George"){
url <- paste0(http://www.website.com/", a)
readHTMLTable(url)
}
и пусть функция просматривает список имен и нажимает URL с каждым именем.
Спасибо.
Комментарии:
1. Обязательно используйте
lapply
вместоfor
, чтобы ваши результаты были в списке. Также:
между строками не работает; используйте переменную, в которой вы их сохранили.
Ответ №1:
Вы бы выбрали for (i in 1:length(a)) { etc }
, но да, разбираться в функциях apply, как правило, предпочтительнее по соображениям скорости.
Комментарии:
1. Черт возьми, как я никогда этого не пробовал, сработало отлично, спасибо. Итак, будет ли lapply чем-то вроде
2. a <- lapply(таблица, функция(x){
3. Извините, я не могу перестать нажимать enter.
4. a <- lapply(таблица, функция(x){ ?? })
5.
b <- lapply(a, FUN = function(x) { url <- paste0(http://www.website.com/", x) return(readHTMLTable(url)) }
получил бы (я думаю) вам список таблиц, который вы могли бы затем повторно связать с data.frame или чем-то еще. хотя и непроверенный
Ответ №2:
Используйте «» в функции paste0
a = c("Joe", "John", "George")
for (i in 1:length(a)){
url <- paste0("http://www.website.com/", a)
readHTMLTable(url)
}
lapply(a, function(x){paste0("http://www.website.com/", x)})
[[1]]
[1] "http://www.website.com/Joe"
[[2]]
[1] "http://www.website.com/John"
[[3]]
[1] "http://www.website.com/George"
sapply(a, function(x){paste0("http://www.website.com/", x)})
Joe John George
"http://www.website.com/Joe" "http://www.website.com/John" "http://www.website.com/George"