2014-12-10 3 views
0

Я пытаюсь получить список сложных объектов (подключения файлов) в R. Существует вектор символов с именами файлов. Я хочу открыть каждый файл с файлом() и где-нибудь сохранить его объект соединения (чтобы иметь возможность закрыть их позже). Длина имени файла является переменной. То, что я пытаюсь сделать, это:Добавление к списку объектов

files <- c("file1", "file2", "file3") #just for example 
f <- list() 
for (i in 1:length(files)) 
{ 
    f<- append(f, file(files[i], open="wt")) 
} 

К сожалению, е становится список целого и я не могу работать близко() для его элементов

мне это нужно, чтобы остаться список объектов связи:

list(file("fname1"),file("fname2"),file("fname3")) 

Если заменить Append() со списком() при цикле не будет преобразовывать соединения с целыми числами, но это будет список список список и т.д ..

+2

'files_connections <- lapply (файлы, функция (е) файл (е, открыт = "вес"))' или 'files_connections <- lapply (файлы, файл "вес") или' files_connections < - lapply (файлы, файл, open = "wt") ' – DrDom

+0

Вы также можете выполнить (не проверено)' f [[i] <- файл (файлы [i], open = "wt") '. –

+0

@DrDom, пожалуйста, добавьте свой комментарий в качестве ответа! – BenBarnes

ответ

1

это не R стиль для добавления элементов к списку итеративно. Более корректно использовать функцию lapply, которая выполняет итерацию через данный объект, применяет определенную пользователем функцию и возвращает список. Есть три вызова, которые должны давать одинаковые результаты (не проверены).

files_connections <- lapply(files, function(f) file(f, open="wt")) 
files_connections <- lapply(files, file, "wt") 
files_connections <- lapply(files, file, open="wt") 
Смежные вопросы