2016-03-08 6 views
0

У меня есть несколько переменных следующим образом:запись файлов в R с помощью цикла

cats <- "some long text with info" 
dogs <- "some long text with info" 
fish <- "some long text with info" 
.... 

и я вручную пишу содержание этих переменных в текстовый файл:

write.table(cats, "info/cats.txt", sep="\t") 
write.table(dogs, "info/dogs.txt", sep="\t") 
.... 

Я прочитал ответ до this question и попытался написать цикл для автоматической записи файлов.

Так что я создал список:

lst <<- list(cats, dogs,fish, ....) 

, а затем итерацию по списку:

for(i in seq_along(lst)) { 
    write.table(lst[[i]], paste(names(lst)[i], ".txt", sep = ""), 
       col.names = FALSE, row.names = FALSE, sep = "\t") 
} 

, но на выходе выше итерации один текстовый файл называется .txt и содержит содержание последней переменной в списке.

любая идея, почему вышеуказанный цикл не работает должным образом?

+0

'is.null (имена (lst)); # [1] TRUE' – nrussell

+0

@nrussell, который возвращает 'TRUE' –

+1

Да - вы не назвали свой список. Эквивалентно, 'paste0 (NULL," .txt ")' – nrussell

ответ

6

Обратите внимание на следующее:

> cats <- "some long text with info" 
> dogs <- "some long text with info" 
> fish <- "some long text with info" 
> lst <- list(cats, dogs,fish) # not <<- 
> names(lst) 
NULL 

Когда вы создали свой список, вы не дали ему никаких имен, так что ваш цикл не имеет ничего, чтобы работать с. A:

> names(lst) <- c("cats", "dogs", "fish") 
+0

спасибо, я думал, что имя автоматически выбирается из списка –

+0

Именованные аргументы станут именами списков, например 'list = list (cats = cats, name_of_dog_item = dogs, fish_here = fish) 'будут иметь имена' 'cats", '" name_of_dog_item "и т. д. – Gregor

+0

В качестве альтернативы' mget' автоматически назовет ваш список: 'mget (c (« cats »,« dogs »,« fish »)) '. – nrussell

Смежные вопросы