2017-02-04 7 views
1

Я пытаюсь сохранить несколько кадров данных из списка в отдельном каталоге. что-то случилось с моим кодом: Кодwrite.csv в списке фреймов данных

lapply(na_s, function (x) write.csv(na_s[[x]],file = paste('/na_s_daily/',names (na_s[x]),'.csv',sep=""), row.names = F)) 

Ошибка:

Error in na_s[[x]] : invalid subscript type 'list' 

Любой может видеть то, что я делаю неправильно?

+0

Пожалуйста, сделайте ваш вопрос воспроизводимым ... не зная, что 'na_s' делает это трудным для решения. (Документы на [минимальном] (http://stackoverflow.com/help/mcve) и [воспроизводимые] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible- пример).) – r2evans

ответ

1

Проблема в том, что вход x является числом, а не элементом списка. Попробуйте

lapply(1:length(na_sx), function (x) write.csv(na_s[[x]],file = paste('./na_s_daily/','na_', names (na_s[x]),'.csv',sep=""), row.names = F)) 

Обратите внимание, что выше, также будет возвращать список фреймов данных. Так что, если вам нужно просто сохранить каждый элемент списка в качестве кадра данных в каталоге вобще

for(x in 1:length(na_s)){ 
    write.csv(na_s[[x]],file = paste('./na_s_daily/','na_',names (na_s[x]),'.csv',sep=""), row.names = F) 
} 
+0

Я не думаю, что это решает мою проблему и применяет потребности и аргумент, которые будут переданы, на какой объект будет применена некоторая функция. который является списком 'na_s' –

+0

@m_c рад, что это сработало! Я также обновил цикл for, если вам просто нужно сохранить каждый элемент. Пожалуйста, примите мой ответ, если это поможет вам. – tatxif

+0

звучит, приятно. вам просто нужно исправить первый ответ, 1: N на самом деле не работает. :) –

1

Если вы хотите использовать имена в списке, я хотел бы предложить использовать mapply. Вы также должны быть уверены, что выходной каталог существует до его использования, иначе вы получите сообщение об ошибке. Я также изменил paste на paste0 (что составляет paste(x, sep = "")).

na_s <- list("one" = mtcars, "two" = mtcars, "three" = mtcars) 

mapply(function (x,y) write.csv(x, file = paste0('./na_s_daily/', y, '.csv'), row.names = F), na_s, names(na_s)) 
+0

'lapply (1: length (na_s), function (x) write.csv (na_s [[x]], file = paste ('./ na_s_monthly /', 'na _', имена (na_s [x]), .csv ', sep = ""), row.names = F)) 'работал для меня. –

+0

Как и следовало ожидать. Различия в том, что код в моем ответе не нуждается в ссылке индексов списка внутри функции. –

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