R так же, доступ к элементам списка

Я думаю, что упускаю что-то простое, но у меня проблемы с доступом к элементам списка в lapply.

Проблема: у меня есть несколько файлов на FTP, которые я хочу загрузить и прочитать. Поэтому мне нужно указать местоположение, загрузить их и прочитать. Все, что, по моему мнению, лучше всего можно обработать с помощью нескольких списков, но я не могу заставить его работать в моей функции.

Я хотел бы иметь возможность начать с вызова lapply(lst,...), потому что мне нужно как имя переменной (a), так и URL-адрес в одной и той же функции, чтобы легко загружать и называть их.

Пример кода:

a <- "ftp://user:pass@url_A1" 
b <- "ftp://user:pass@url_B1" 
c <- "ftp://user:pass@url_C1" 
d <- "ftp://user:pass@url_D1"

lst <- list(a, b, c, d)
names(lst) <- c("a", "b", "c", "d")

Желаемая цель:

print(lst[[1]]), ...., print(lst[[4]])

Что я пробовал:

lapply(lst, 
function(x) print(x[[]]) 
)

# Error!

Мой реальный код выглядит примерно так:

lapply(lst, 
       function(x) download.file(url = x[[]], # Error!  
                               destfile = paste0(lok, paste0(names(x), ".csv")),
                               quiet = FALSE)
      )

РЕДАКТИРОВАТЬ:

Я знаю, что x[[]] выдает ошибку, это просто для иллюстрации того, что я хотел бы получить.


person Thorst    schedule 29.07.2014    source источник
comment
Во-первых, удалите [[]], который lapply() не нужен. Тогда это работает?   -  person Stephan Kolassa    schedule 29.07.2014
comment
Если я их удалю, он напечатает $a, а затем url, мне нужен конкретно элемент списка [[1]]. Итак, только url, иначе я не могу его использовать.   -  person Thorst    schedule 29.07.2014
comment
Вероятно, вы могли бы использовать rapply или sapply, то есть rapply(lst, print), но это добавляет дополнительную строку в конце   -  person David Arenburg    schedule 29.07.2014
comment
Я полагаю, вы хотите распечатать текущий URL-адрес в процессе: lapply(lst, function(x) { cat('Processing url:',x,'\n'); download.file(url = x, destfile = paste0(lok, paste0(names(x), ".csv")),quiet = FALSE) } )   -  person Silence Dogood    schedule 29.07.2014
comment
а, почему бы тебе не lapply(lst,print) ?   -  person Matt Bannert    schedule 29.07.2014
comment
@Ossan: это сработало :) @Matt: Потому что lapply(lst, print) дает мне lst[1], а не lst[[1]]. Мне нужен последний, потому что мне нужно использовать его в качестве URL-адреса. Не сказать, что это оптимальное решение :)   -  person Thorst    schedule 29.07.2014


Ответы (1)


Непроверенный:

lapply(names(lst),function(x){
download.file(url = lst[[x]],
destfile = paste0(lok,paste0(x,".csv")),
quiet = FALSE)
}

Это должно работать, если определено lok.

person Matt Bannert    schedule 29.07.2014