如何在for循环中使用read.table?

时间:2014-03-27 13:35:22

标签: r

我想在read.table循环中使用for,并对每个数据进行一次分析,并将结果写入矩阵。文件名具有以下模式AA.BB.CC.P1.DDAA.BB.CC.P2.DD

我试过了:

for(i in 1:8) {
  assign( paste("AA.BB.CC.P", i, sep="") 
    data <- read.table(paste(i, "DD", sep="."))

a <- data$V7
b <- data$V12
c <- data$V13
d <- data$V15

function(a,b,c,d)
  }

我收到此错误:

Error in file(file, "rt") : cannot open the connection In addition: Warning message: In file(file, "rt") : cannot open file '1.DD': No such file or directory

4 个答案:

答案 0 :(得分:2)

这对你有用吗? (我不确定你对function(a,b,c,d)

做了什么
for(i in 1:8) {

  data <- read.table(paste0("AA.BB.CC.P",i,".", "DD"))

          a <- data$V7
          b <- data$V12
          c <- data$V13
          d <- data$V15

          function(a,b,c,d)
}

答案 1 :(得分:1)

for(i in 1:8) {

  data <- read.table(paste("AA.BB.CC.P",i,".DD"))

          a <- data$V7
          b <- data$V12
          c <- data$V13
          d <- data$V15

          function(a,b,c,d)
}

代码中的问题是

data <- read.table(paste(i, "DD", sep="."))

数据来源只是&#34; i.DD&#34;而不是&#34; AA.BB.CC.P.i,DD&#34; ...您应该定义要读取的文件格式吗?例如.csv 如果仍有此问题,请检查文件的路径和实际工作目录 (使用此:&#34; getwd()&#34;检查你的实际wd)

答案 2 :(得分:1)

你的代码是胡言乱语。不要在这里使用for循环。最简单的方法是将所有文件放在一个目录中,然后执行以下操作:

ff <- list.files(path="<add your dir path here>", full.names=TRUE)
#use the pattern argument, if you have files in the directory, 
#   which you don't want to read in

myfilelist <- lapply(ff, read.table)
names(myfilelist) <- list.files(path="<add your dir path here>", full.names=FALSE)

这为您提供了一个包含data.frames的精美列表,与工作区中的大量对象相比,它更容易使用。

答案 3 :(得分:1)

这个答案建立在罗兰的答案之上。

要迭代文件中的项目并将其读入表格,您可以使用Roland的代码。他将read.table函数传递给lapply。

问题是您无法将非默认参数传递给read.table函数。

下面的代码创建了一个设置header = False和sep =','的函数,但您可以更改它并个性化您自己的函数(这解决了user2162153的问题)。

#Building up on Roland's answer, you can pass a personalized reader function. First define your function and than use his codes. 

Personalized_Reader <- function(lambda){
 read.table(lambda, header = FALSE ,sep = ',')}


# Personalize your arguments on the read.table function

ff <- list.files(path="<add your dir path here>", full.names=TRUE)
#use the pattern argument, if you have files in the directory, which you don't want to read in

myfilelist <- lapply(ff, Personalized_Reader)

names(myfilelist) <- list.files(path="<add your dir path here>", full.names=FALSE)

`