Как извлечь индекс или имя элемента списка в FUN из lapply?

StackOverflow https://stackoverflow.com//questions/25006076

  •  20-12-2019
  •  | 
  •  

Вопрос

Скажем, у меня есть список списков 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)
})
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top