R- для цикла для непоследовательного списка

#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"