Как извлечь индекс или имя элемента списка в FUN из lapply?
Вопрос
Скажем, у меня есть список списков lists
:
> lists
$a
[1] "fas" "asdfas" "adfaff" ...
$b
[1] "jnfg" "gfsdgs" "fdsafa" ...
...
Я хотел бы экспортировать каждый список в отдельный файл CSV, где имя файла является индексом списка.Я пытаюсь сделать это, используя lapply
вместо цикла for это возможно?Для меня трудность заключается в том, как извлечь индекс списка (или имя в данном случае) внутри FUN
?Например, если бы я назвал их случайным образом, я мог бы сделать это:
lapply(lists, function (x)
write.table(paste(sample(1:100000000,1), ".csv", sep=""),
sep=",", col.names=F, row.names=F))
Редактировать: Образец dput
: http://pastebin.com/a0eEkT1z
Редактировать2: Более короткий образец:( ← этот более разумный)
list(c("Itm2a", "Rplp2", "Arl6ip5", "Crygn", "Znrf1", "Gm5766",
"D19Ertd652e", "Nkap"), c("Sergef", "2610002I17Rik", "Hjurp",
"Mns1", "Top3a", "Ldlrap1", "Ube2c", "Cnot3", "Irf6"), c("Fam109a",
"Rps3a", "Dut", "Atm", "Fancg", "S100a5", "Lpcat2", "Sec23ip"
))
Решение
Вы не можете.Один трюк заключается в использовании lapply
для перебора имен или вы можете использовать Map
сделать что-то вроде
Map(function (name, data)
write.table(data, paste0(name, ".csv"),
sep=",", col.names=F, row.names=F)
, names(lists), lists)
Другие советы
Вы можете использовать mapply
mapply(function(name, x) {
write.table(x, paste0(name, ".csv"), sep=",", col.names=F, row.names=F)
}, names(lists), lists)
Или на самом деле используя lapply
также возможно
lapply(names(lists), function(name) {
write.table(lists[name], paste0(name, ".csv"), sep=",", col.names=F, row.names=F)
})