如何从R导出多个数据帧列表

问题描述

我想将我的3个列表中的所有数据帧导出到单独的Eigen::Matrix<double,3,8> coordinates3d; coordinates3d << 0.0,0.0,1.0,0.0; double *p = &coordinates3d(0,0); std::vector<double> x2y2; x2y2.assign(p,p + coordinates3d.size()); for(int i=0;i < coordinates3d.size(); i++) { std::cout <<x2y2[i]; } 文件中。 我有一个列表“ my_list”,其中包含3个列表(list1,list2和list3)。

每个列表包含多个数据框。我想将3个列表的所有'.txt'导出到单独的文件dataframesr1_df1.txtr1_df2.txtr2_df3.txtr2_df4.txt,{{ 1}},r2_df5.txtr3_df6.txt

让我们创建一些数据框:

r3_df7.txt

列表中的数据框

r3_df8.txt

my_list包含3个列表

df1 <- data.frame(geneName = 1:3,EnsemblID = 4:6,position = c(654654654,654654,654654))
df2 <- data.frame(id = 1:3,sex = c("M","F","T"))
df3 <- data1 <- data.frame(x1 = 1:3,x2 = letters[1:3])
df4 <- data.frame(y1 = c(3,2,1),y2 = c(6,5,4))
df5 <- data.frame(geneName = 1:3,position = c(65465,987987))
df6 <- data.frame(id = 1:3,sex = c("C","S","T"))
df7 <- data1 <- data.frame(x1 = 1:3,x2 = letters[1:3])
df8 <- data.frame(z1 = c(3,45,p2 = c(6,4))

将数据帧导出为单独的list1 <- list(df1,df2); names(list1) <- c("df1","df2") list2 <- list(df3,df4,df5); names(list2) <- c("df3","df4","df5") list3 <- list(df6,df7,df8); names(list3) <- c("df6","df7","df8") 文件**

对于一个列表,我使用此代码

my_list <- list(list1,list2,list3); names(my_list) <- c("r1","r2","r3")

如何一次对所有列表执行相同的操作?

我尝试循环

.txt

我得到3个文件,每个文件都有绑定数据帧,而不是单独的数据帧。

解决方法

如果同时遍历名称和数据,这样做会更容易。

尝试使用purrr

library(purrr)

imap(my_list,function(x,y) imap(x,~write.table(.x,paste0(y,'_',.y,".txt"),row.names = FALSE,quote = FALSE,sep = "\t",dec = ",")))

或者如果您想将内容保留在基数R中:

Map(function(x,y) {
  Map(function(p,q) {
    write.table(p,q,")
  },x,names(x))
},my_list,names(my_list))
,

您可能不希望unlist先递归。

my_list.u <- unlist(my_list,recursive=F)
for (i in seq_along(my_list.u)) {
    filename=paste0("r_",names(my_list.u)[i],".txt")
    write.table(my_list.u[[i]],filename,row.names=FALSE,quote=FALSE,sep="\t",dec="," )
}

或者不使用for进行sapply循环,速度快20%。

sapply(seq(my_list.u),function(x) 
  write.table(my_list.u[[x]],paste0(names(my_list.u)[x],"))