R 通过循环列表名称命名元素
很抱歉,标题可能有误导性,文章可能会重复 我想创建一个循环,它将解析列表元素1:4,并在data.frame中使用循环选择的元素名称设置它的元素。 我从一个列表开始:R 通过循环列表名称命名元素,r,for-loop,R,For Loop,很抱歉,标题可能有误导性,文章可能会重复 我想创建一个循环,它将解析列表元素1:4,并在data.frame中使用循环选择的元素名称设置它的元素。 我从一个列表开始: > names(peakAnnoList_chip) [1] "CAPAN1_px8_JunB" "CAPAN1_px13_JunB" "Panc1_13_cjun" "Panc1_px8_old_cJun" > class(peakAnnoList_chip) [1] "list" 然后我得到
> names(peakAnnoList_chip)
[1] "CAPAN1_px8_JunB" "CAPAN1_px13_JunB" "Panc1_13_cjun" "Panc1_px8_old_cJun"
> class(peakAnnoList_chip)
[1] "list"
然后我得到第一个元素:
> CAPAN1_px8_JunB <- as.data.frame(peakAnnoList_chip[[1]]@anno)
> class(CAPAN1_px8_JunB)
[1] "data.frame"
但是在那里,我找不到一种优雅的方法来设置data.frame的特定名称(CAPAN1_px8_JunB)
有什么线索吗?一个选项是
lappy
循环“peakAnnoList_芯片”的名称,提取“anno”并使用write.table将其写入不同的数据集
lapply(names(peakAnnoList_chip), function(nm)
write.table(peakAnnoList_chip[[nm]]@anno,
file = paste0(nm, "_annotation.txt"), sep="\t", quote = FALSE))
或者另一个选项是
Map
Map(function(dat, nm) write.table(dat@nno, file =
paste0(nm, "_annotation.txt"), sep="\t", quote = FALSE),
peakAnnoList_chip, names(peakAnnoList_chip))
或使用
imap
library(purrr)
library(stringr)
imap(peakAnnoList_chip, ~ write.table(.x, file = str_c(.y,
"_annotation.txt"), sep="\t", quote = FALSE))
一个选项是
lappy
循环“peakAnnoList_chip”的名称,提取“anno”并使用write.table将其写入不同的数据集
lapply(names(peakAnnoList_chip), function(nm)
write.table(peakAnnoList_chip[[nm]]@anno,
file = paste0(nm, "_annotation.txt"), sep="\t", quote = FALSE))
或者另一个选项是
Map
Map(function(dat, nm) write.table(dat@nno, file =
paste0(nm, "_annotation.txt"), sep="\t", quote = FALSE),
peakAnnoList_chip, names(peakAnnoList_chip))
或使用
imap
library(purrr)
library(stringr)
imap(peakAnnoList_chip, ~ write.table(.x, file = str_c(.y,
"_annotation.txt"), sep="\t", quote = FALSE))
谢谢你的回答,我来测试一下。还有一种优雅的方法可以在循环中命名:CAPAN1_px8_JunB@sunta3iouxos的输出吗?我想说的是,不要在全局环境中创建多个对象,因为它效率低下,并且会产生问题。我肯定理解这一点(最好将所有特殊数据迭代到相同的元素中)但在某些情况下,我希望将所有元素作为将来的参考,因为原始文件可能不再存在,甚至可能不共享这些元素。@sunta3iouxos在这种情况下,您可以删除
write.csv
部分并将其存储在列表中,然后再编写它。i、 对不起,我还没有测试。谢谢你的回答,我会测试的。还有一种优雅的方法可以在循环中命名:CAPAN1_px8_JunB@sunta3iouxos的输出吗?我想说的是,不要在全局环境中创建多个对象,因为它效率低下,并且会产生问题。我肯定理解这一点(最好将所有特殊数据迭代到相同的元素中)但在某些情况下,我希望将所有元素作为将来的参考,因为原始文件可能不再存在,甚至可能不共享这些元素。@sunta3iouxos在这种情况下,您可以删除write.csv
部分并将其存储在列表中,然后再编写它。i、 抱歉,还没有测试它