首页 > 解决方案 > R中文件名格式变量内嵌套循环中的操作

问题描述

以下代码在 R 中运行良好,我通过在 matlab 的嵌套循环(SID,会话)中使用“disp”函数来完成这个技巧。

....
S09_06<- read.csv("09_06.csv", header=TRUE,sep=",")
S10_01<- read.csv(file="10_01.csv",header=TRUE, sep=",")
...

所以现在编码是R + matlab的组合,实际上效率不高。

应该有一些方法可以在 R 中实现它?

我已经尝试过多次根据互联网上找到的可能解决方案进行少量修改的编码,

SID = c(....9, 10,....)
S = 1:6

for (value in SID){
  if (value < 10)
  for (value in S){
  paste0("S0",SID,"_0",S)  = read.csv(file = paste("0",SID,"_0", S, ".csv"), header=TRUE,sep=",")
  }else{
  paste0("S",SID,"_0",S)  = read.csv(file = paste("0",SID,"_0", S, ".csv"), header=TRUE,sep=",")
  }

}

但是,下面的错误消息每次都会显示,

“文件中的错误(文件,“rt”):无效的“描述”参数”

如何使操作有效?

谢谢你。

标签: rloopsnested

解决方案


考虑通过首先构建文件名向量并将它们传递到lapplyorsapply调用来构建数据框列表。下面用于sapply生成命名(与未命名)数据框列表。

# CREATE VECTOR OF FILE NAMES (PASSING TWO VECTORS)
filenames <- as.vector(sapply(SID, 
                              function(x,y) paste0("S", ifelse(x < 10, 
                                                               paste0("0", x),
                                                               paste(x)), 
                                                   "_0", y),
                              S)
                      )

# CREATE NAMED LIST OF DATA FRAMES (PASSING ONE VECTOR) 
df_list <- sapply(filenames, function(i) {
                     fname <- paste0(substr(i, 2, nchar(i)),".csv")
                     read.csv(fname, header=TRUE, sep=",")
                  }, simplify=FALSE)

# ACCESS INDIVIDUAL DATA FRAMES    
df_list$S09_01  
df_list$S09_02
df_list$S09_03
...

推荐阅读