如何在R中的for循环中调用多个变量?

时间:2018-06-11 13:44:27

标签: r variables for-loop

我有几个存储在目录中的.csv数据文件,我需要将它们全部导入到R.

每个.csv在导入R时都有两列。但是,第1001行需要存储为每个.csv文件的单独变量(它对应于模拟期间存储在此处的预期值; I希望它在主要数据之外)。

到目前为止,我有以下代码将我的.csv文件导入为矩阵。

#Load all .csv in directory into list
dataFiles <- list.files(pattern="*.csv")

for(i in dataFiles) {
   #read all of the csv files
   name <- gsub("-",".",i)
   name <- gsub(".csv","",name)  
   i <- paste(".\\",i,sep="")
   assign(name,read.csv(i, header=T))
}

这产生了几个具有命名约定“sim_data_L_mu”的矩阵,其中L和mu是来自模拟的参数。如何从每个矩阵中删除第1001行(第一列中有数字,第二列为空)并将其存储为名为“sim_data_L_mu_EV”的变量?我遇到的主要问题是我不知道如何在for循环中调用所有新创建的矩阵。

1 个答案:

答案 0 :(得分:0)

无法在评论中发布长代码,所以我写在这里:

# Use dialog to select folder
# Full names are required to access files that are not in the current working directory 
file_list <- list.files(path = choose.dir(), pattern = "*.csv", full.names = T)
big_list <- lapply(file_list, function(z){
  df <- read.csv(z)
  scalar <- df[1000,1]
  return(list(df, scalar))
})

要从第三个文件访问标量值,您可以使用

big_list[[3]][2]

big_list中的元素遵循file_list的顺序,因此您始终知道数据来自哪个文件。

如果您使用data.table::fread()而不是read.csv,则可以使用分配列名,选择要读取的行/列等。对于大型数据文件,它也要快得多。

希望这有帮助!