Hi there, Thanks for your time in advance. I am trying to read in multiple files. For example, data.1940 <- read.table("c:/data/1940.csv",header=TRUE,sep=",") data.1950 <- read.table("c:/data/1950.csv",header=TRUE,sep=",") data.1960 <- read.table("c:/data/1960.csv",header=TRUE,sep=",") How can I write a loop to read the data? I was trying to use the following year<-c(1940,1950,1960) for (j in 1:3){ data.year[j] <- read.table("c:/data/year[j] .csv",header=TRUE,sep=",") } But it is obviously wrong, as the marco is not proctected. I have been googling around for a while but haven't succeeded in finding any solutions. Thanks again for your help. Le
Dear Le, Try this: year<-c(1940,1950,1960) for (i in y) assign(paste("data.",i,sep=""), read.table("c:/data/i.csv",header=TRUE,sep=",")) data.1940 data.1950 data.1960 See ?assign for more details. HTH, Jorge On Sat, Mar 21, 2009 at 3:53 PM, Le Wang <ruser.le@gmail.com> wrote:> Hi there, > > Thanks for your time in advance. > > I am trying to read in multiple files. For example, > > data.1940 <- read.table("c:/data/1940.csv",header=TRUE,sep=",") > data.1950 <- read.table("c:/data/1950.csv",header=TRUE,sep=",") > data.1960 <- read.table("c:/data/1960.csv",header=TRUE,sep=",") > > How can I write a loop to read the data? I was trying to use the following > > year<-c(1940,1950,1960) > > for (j in 1:3){ > > data.year[j] <- read.table("c:/data/year[j] > .csv",header=TRUE,sep=",") > > } > > But it is obviously wrong, as the marco is not proctected. > > I have been googling around for a while but haven't succeeded in > finding any solutions. Thanks again for your help. > > Le > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >[[alternative HTML version deleted]]
Sorry. Not sure what you mean by macro not " protected." ?paste ?assign Perhaps: > filelist <- paste("c:\\data\\", year,".csv", sep="") > filelist [1] "c:\\data\\1940.csv" "c:\\data\\1950.csv" "c:\\data\\1960.csv" for (i in filelist) { assign( paste("data.", year[i], sep="") , read.table( file=i, , header=TRUE, sep=",") ) } On Mar 21, 2009, at 3:53 PM, Le Wang wrote:> Hi there, > > Thanks for your time in advance. > > I am trying to read in multiple files. For example, > > data.1940 <- read.table("c:/data/1940.csv",header=TRUE,sep=",") > data.1950 <- read.table("c:/data/1950.csv",header=TRUE,sep=",") > data.1960 <- read.table("c:/data/1960.csv",header=TRUE,sep=",") > > How can I write a loop to read the data? I was trying to use the > following > > year<-c(1940,1950,1960) > > for (j in 1:3){ > > data.year[j] <- read.table("c:/data/year[j] > .csv",header=TRUE,sep=",") > > } > > But it is obviously wrong, as the marco is not proctected. > > I have been googling around for a while but haven't succeeded in > finding any solutions. Thanks again for your help. > > LeDavid Winsemius, MD Heritage Laboratories West Hartford, CT
R does not directly support macros and I don't think that that is what you meant. Also we probably want to put the data frames in a list so we can easily operate over all of them later. (If these are time series also see read.zoo in the zoo package.) setwd("c:/data") filenames <- paste(year, "csv", sep = ".") DFlist <- sapply(filenames, read.csv, simplify = FALSE) On Sat, Mar 21, 2009 at 3:53 PM, Le Wang <ruser.le at gmail.com> wrote:> Hi there, > > Thanks for your time in advance. > > I am trying to read in multiple files. For example, > > ?data.1940 <- read.table("c:/data/1940.csv",header=TRUE,sep=",") > ?data.1950 <- read.table("c:/data/1950.csv",header=TRUE,sep=",") > ?data.1960 <- read.table("c:/data/1960.csv",header=TRUE,sep=",") > > How can I write a loop to read the data? I was trying to use the following > > ? ? ? ?year<-c(1940,1950,1960) > > ? ? ? ?for (j in 1:3){ > > ? ? ? ? ? ? ? ? ? ? ?data.year[j] <- read.table("c:/data/year[j] > .csv",header=TRUE,sep=",") > > ? ? ? ?} > > But it is obviously wrong, as the marco is not proctected. > > I have been googling around for a while but haven't succeeded in > finding any solutions. Thanks again for your help. > > Le > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >
data.year[j] <- read.table(paste("c:/data/",year[j],".csv",sep=''),header=T,sep=",") should do it. Le Wang wrote:> Hi there, > > Thanks for your time in advance. > > I am trying to read in multiple files. For example, > > data.1940 <- read.table("c:/data/1940.csv",header=TRUE,sep=",") > data.1950 <- read.table("c:/data/1950.csv",header=TRUE,sep=",") > data.1960 <- read.table("c:/data/1960.csv",header=TRUE,sep=",") > > How can I write a loop to read the data? I was trying to use the following > > year<-c(1940,1950,1960) > > for (j in 1:3){ > > data.year[j] <- read.table("c:/data/year[j] > .csv",header=TRUE,sep=",") > > } > > But it is obviously wrong, as the marco is not proctected. > > I have been googling around for a while but haven't succeeded in > finding any solutions. Thanks again for your help. > > Le > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >
COnsider the use of a 'list': dataYear <- lapply(c(1940, 1950, 1960), function(.file){ read.table(paste("c:/data/", .file, '.csv', sep=''), header=TRUE, sep=',') }) The you can access your data: dataYear[['1940']] or dataYear$"1940" On Sat, Mar 21, 2009 at 3:53 PM, Le Wang <ruser.le at gmail.com> wrote:> Hi there, > > Thanks for your time in advance. > > I am trying to read in multiple files. For example, > > ?data.1940 <- read.table("c:/data/1940.csv",header=TRUE,sep=",") > ?data.1950 <- read.table("c:/data/1950.csv",header=TRUE,sep=",") > ?data.1960 <- read.table("c:/data/1960.csv",header=TRUE,sep=",") > > How can I write a loop to read the data? I was trying to use the following > > ? ? ? ?year<-c(1940,1950,1960) > > ? ? ? ?for (j in 1:3){ > > ? ? ? ? ? ? ? ? ? ? ?data.year[j] <- read.table("c:/data/year[j] > .csv",header=TRUE,sep=",") > > ? ? ? ?} > > But it is obviously wrong, as the marco is not proctected. > > I have been googling around for a while but haven't succeeded in > finding any solutions. Thanks again for your help. > > Le > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem that you are trying to solve?