An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20110521/158baf32/attachment.pl>
How to intantiate a list of data.frames?
7 messages · Rui Maximo, Joshua Wiley
Hi Rui,
Here is one option:
ds <- vector("list", 6)
for(i in 1:6) ds[[i]] <- list(df = mtcars[, c(i, i + 2)], df2 =
mtcars[, c(i, i + 2)] + 10)
another could be:
altds <- lapply(1:6, function(x) {
list(df = mtcars[, c(x, x + 2)], df2 = mtcars[, c(x, x + 2)] + 10)
})
all.equal(ds, altds)
For some documentation, see
?vector
?lapply
Cheers,
Josh
On Sat, May 21, 2011 at 10:47 AM, Rui Maximo <ruimaximo at hotmail.com> wrote:
Hello,
?I am newbie to R and I want to do this:
for(i in 1:6)
{
? ? ? ?ds[i] <- list(df=data.frame(oilDF[,1],oilDF[,i+2]), df2=data.frame(oilDF2[,1],oilDF2[,i+2]))
}
#oilDF and oilDF2 are 2 data frames with several columns. They have different number of rows
#I want to have for example ds[1]$df, ds[1]$df2 with the respective data.frames.
#How can I instantiate a list of data.frames pairs with different number of rows?
Thank you,
Rui
? ? ? ?[[alternative HTML version deleted]]
______________________________________________ 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.
Joshua Wiley Ph.D. Student, Health Psychology University of California, Los Angeles http://www.joshuawiley.com/
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20110522/f07a81e0/attachment.pl>
Hi Rui, data frames must have the same number of rows, but two different data frames stored within a list do not need to have the same number of rows. Can you please post the code that is giving the error? Josh
On Sun, May 22, 2011 at 9:41 AM, Rui Maximo <ruimaximo at hotmail.com> wrote:
Hi Josh, Sorry, your examples have equal number of rows in both df and df2. In my situation they haven't. Strangely, your solution have worked only when I am copy post the code into the command line. If I use the code inside of a function I get an error at: return(ds) ERROR: arguments imply differing number of rows Thanks, Rui
Date: Sat, 21 May 2011 11:46:05 -0700
Subject: Re: [R] How to intantiate a list of data.frames?
From: jwiley.psych at gmail.com
To: ruimaximo at hotmail.com
CC: r-help at r-project.org
Hi Rui,
Here is one option:
ds <- vector("list", 6)
for(i in 1:6) ds[[i]] <- list(df = mtcars[, c(i, i + 2)], df2 =
mtcars[, c(i, i + 2)] + 10)
another could be:
altds <- lapply(1:6, function(x) {
list(df = mtcars[, c(x, x + 2)], df2 = mtcars[, c(x, x + 2)] + 10)
})
all.equal(ds, altds)
For some documentation, see
?vector
?lapply
Cheers,
Josh
On Sat, May 21, 2011 at 10:47 AM, Rui Maximo <ruimaximo at hotmail.com>
wrote:
Hello,
?I am newbie to R and I want to do this:
for(i in 1:6)
{
? ? ? ?ds[i] <- list(df=data.frame(oilDF[,1],oilDF[,i+2]),
df2=data.frame(oilDF2[,1],oilDF2[,i+2]))
}
#oilDF and oilDF2 are 2 data frames with several columns. They have
different number of rows
#I want to have for example ds[1]$df, ds[1]$df2 with the respective
data.frames.
#How can I instantiate a list of data.frames pairs with different number
of rows?
Thank you,
Rui
? ? ? ?[[alternative HTML version deleted]]
______________________________________________ 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.
-- Joshua Wiley Ph.D. Student, Health Psychology University of California, Los Angeles http://www.joshuawiley.com/
Joshua Wiley Ph.D. Student, Health Psychology University of California, Los Angeles http://www.joshuawiley.com/
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20110522/46fee096/attachment.pl>
2 days later
Hi Rui, Please look at the documentation for ?write.csv I do not have oilDF, but my guess is that you make the object, "ds" fine, but then you are trying to pass a list to write.csv which works on matrices or data frames (or attempts to coerce to such). The easiest answer is probably to write each element of "ds" (that is, each data frame) to a separate file. Cheers, Josh
On Sun, May 22, 2011 at 12:11 PM, Rui Maximo <ruimaximo at hotmail.com> wrote:
I will post the whole function, but I believe the problem is in the 3th
part.
The issue is that oilDF has different number of rows than oilDF2.
Thank you,
Rui
myScan <- function(dirPath, num)
{
#dirPath is the name of the directory where we want to apply the function.
It should be called from the immediate above level without the last 3
characters. For example dirPath="oil_0"
#num is the mussel number
??? #Heart rate
??? startPath=getwd()
??? workPath=paste(startPath,"/", dirPath,"_HR", sep="")
??? setwd(workPath)
??? temp=dir()
??? d=sort(temp)
??? oilDF=read.table (d[1], header=TRUE)
??? oilDF=data.frame(oilDF[,1], oilDF[,2], oilDF[,num+2])
??? for(i in 2:length(d))
??? {
??? ??? temp <- read.table(d[i], header=TRUE)
??? ??? temp=data.frame(temp[,1], temp[,2], temp[,num+2])
??? ??? colnames(temp) <- colnames(oilDF)
??? ??? oilDF=rbind(oilDF,temp)
??? }
??? setwd(startPath)
??? #Valve Gape
??? workPath=paste(startPath,"/", dirPath,"_VG", sep="")
??? setwd(workPath)
??? temp=dir()
??? d=sort(temp)
??? oilDF2=read.table (d[1], header=FALSE)
??? oilDF2=data.frame(oilDF2[,1],oilDF2[,2],oilDF2[,num+3])
??? for(i in 2:length(d))
??? {
??? ??? temp <- read.table(d[i], header=FALSE)
??? ??? temp=data.frame(temp[,1], temp[,2], temp[,num+3])
??? ??? colnames(temp) <- colnames(oilDF2)
??? ??? oilDF2=rbind(oilDF2,temp)
??? }
??? #Pack both signals in a vector of dataframes for each Mussel.
??? ds <- vector("list", 2)
??? timeHR = as.numeric(strptime(paste(oilDF[,1],oilDF[,2]), "%m/%d/%y
%H:%M:%OS"))
??? timeVG = as.numeric(strptime(paste(oilDF2[,1],oilDF2[,2]), "%d/%m/%y
%H:%M:%OS"))
??? ds[[1]] <- data.frame(timeHR,oilDF[,3])
??? ds[[2]] <- data.frame(timeVG,oilDF2[,3])
??? write.csv(ds,paste(startPath, "/", "mussel_", i, dirPath, ".csv",
sep=""))
??? return(ds)
}
Date: Sun, 22 May 2011 11:33:38 -0700 Subject: Re: [R] How to intantiate a list of data.frames? From: jwiley.psych at gmail.com To: ruimaximo at hotmail.com CC: r-help at r-project.org Hi Rui, data frames must have the same number of rows, but two different data frames stored within a list do not need to have the same number of rows. Can you please post the code that is giving the error? Josh On Sun, May 22, 2011 at 9:41 AM, Rui Maximo <ruimaximo at hotmail.com> wrote:
Hi Josh, Sorry, your examples have equal number of rows in both df and df2. In my situation they haven't. Strangely, your solution have worked only when I am copy post the code into the command line. If I use the code inside of a function I get an error at: return(ds) ERROR: arguments imply differing number of rows Thanks, Rui
Date: Sat, 21 May 2011 11:46:05 -0700
Subject: Re: [R] How to intantiate a list of data.frames?
From: jwiley.psych at gmail.com
To: ruimaximo at hotmail.com
CC: r-help at r-project.org
Hi Rui,
Here is one option:
ds <- vector("list", 6)
for(i in 1:6) ds[[i]] <- list(df = mtcars[, c(i, i + 2)], df2 =
mtcars[, c(i, i + 2)] + 10)
another could be:
altds <- lapply(1:6, function(x) {
list(df = mtcars[, c(x, x + 2)], df2 = mtcars[, c(x, x + 2)] + 10)
})
all.equal(ds, altds)
For some documentation, see
?vector
?lapply
Cheers,
Josh
On Sat, May 21, 2011 at 10:47 AM, Rui Maximo <ruimaximo at hotmail.com>
wrote:
Hello,
?I am newbie to R and I want to do this:
for(i in 1:6)
{
? ? ? ?ds[i] <- list(df=data.frame(oilDF[,1],oilDF[,i+2]),
df2=data.frame(oilDF2[,1],oilDF2[,i+2]))
}
#oilDF and oilDF2 are 2 data frames with several columns. They have
different number of rows
#I want to have for example ds[1]$df, ds[1]$df2 with the respective
data.frames.
#How can I instantiate a list of data.frames pairs with different
number
of rows?
Thank you,
Rui
? ? ? ?[[alternative HTML version deleted]]
______________________________________________ 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.
-- Joshua Wiley Ph.D. Student, Health Psychology University of California, Los Angeles http://www.joshuawiley.com/
-- Joshua Wiley Ph.D. Student, Health Psychology University of California, Los Angeles http://www.joshuawiley.com/
Joshua Wiley Ph.D. Student, Health Psychology University of California, Los Angeles http://www.joshuawiley.com/
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20110525/6014d0eb/attachment.pl>