【问题标题】:How to loop to read one file after another in R?如何在R中循环读取一个又一个文件?
【发布时间】:2015-05-13 13:15:21
【问题描述】:

我的文件是系统命名的,并且都在同一个文件夹中。所以我想利用并编写一个函数来逐个读取它们,而不是为每个手动执行此操作。

名称存储在此文本文件中:

DF <- read.table(text="       site                column row
1          abs   1259 463
2         adm   1253 460
3        afrm   1258 463", header=T)

我想写一个函数来逐行执行:

You can see for instance if we apply for the first row:

cor$siteabs 所以:

   file1=read.table("C:\\Data\\abs.txt",sep = "\t")

cor$column1259

cor$row463

所以

 wf= read.table("C:\\Users\\measurement_ 1259_463.txt", sep =' ' , header =TRUE)

现在我用file1wf 进行任何计算............

然后转到第二行,以此类推。

【问题讨论】:

标签: r loops


【解决方案1】:

使用您要读取的文件名创建一个字符向量,然后按照consolidating data frames in Rreading multiple csv files in R 中的说明进行操作。

files <- data.frame(
    site = paste("C:\\Data\\", DF$site, ".txt", sep=""),
    measurement = paste("C:\\Users\\measurement_", DF$column, "_",
                        DF$row, ".txt", sep=""),
    stringsAsFactors = FALSE)

results <- Map(function(s, m){
    file1 <- read.table(s, sep="\t")
    wt <- read.table(m, sep=' ', header=TRUE)
    # Do stuff
    return(result)
}, files$site, files$measurement)

# Alternatively
results <- vector("list", nrow(files))
for(i in 1:nrow(files)){
    file1 <- read.table(files$site[i], sep="\t")
    wt <- read.table(files$measurment[i], sep=' ', header=TRUE)
    # Do stuff
    results[[i]] <- # result
}

【讨论】:

  • 把你想做的任何事情放在你发送给 lapply 的函数中,或者做一个for,但这是一个不那么 R:ish 的解决方案。
  • 抱歉,我第一次没有掌握所有细节。那这个呢?
  • 只需输入result 即可获得所有信息,或者unlist(result) 将其展平为矢量。如果每次结果只是一个数字,您可以在 for 循环之前将Map 更改为mapplyresults &lt;- rep(NA, nrow(files))
  • 抱歉,忘记将stringsAsFactors 添加到data.frame 调用中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多