问题描述
我想将我的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'
导出到单独的文件(dataframes
,r1_df1.txt
,r1_df2.txt
,r2_df3.txt
,r2_df4.txt
,{{ 1}},r2_df5.txt
,r3_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],"))