Hi: I'm sure this seems like a rudimentary question, but I am not well versed with R syntax for lists. I have a ragged array from which I've removed records (entire rows) with missing data. The functions I used to remove the missing cases resulted in the generation of an R list class object, that looks something like this; mydata [[1]] [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9 [[2]] [,1] [,2] [,3] [1,] 10 11 12 [2,] 13 14 15 [[3]] [,1] [,2] [,3] [1,] 16 17 18 [2,] 19 20 21 [3,] 22 23 24 [4,] 25 26 27 [5,] 28 29 30 Part1 What I would like to do is draw an equal number of random row samples from[[1]],[[2]] and [[3]] (to preserve the structure of [,1][,2],[,3]. Part2 Then I would like to cocerce the list object into something like an array. Help scripting out part 1 or 2 would be much appreciated. Brian Campbell -- View this message in context: http://r.789695.n4.nabble.com/sampling-rows-from-a-list-tp4526831p4526831.html Sent from the R help mailing list archive at Nabble.com.
?? Something like: lapply(mydata, function(x){ nr <- nrow(x) x[sample(seq_len(nr),nr,rep=TRUE),] }) maybe. The idea is to use the sampled rows as your row index. -- Bert On Mon, Apr 2, 2012 at 11:24 AM, Bcampbell99 <BrianD.Campbell at ec.gc.ca> wrote:> Hi: > > I'm sure this seems like a rudimentary question, but I am not well versed > with R syntax for lists. ?I have a ragged array from which I've removed > records (entire rows) with missing data. ?The functions I used to remove the > missing cases resulted in the generation of an R list class object, that > looks something like this; > > mydata > [[1]] > ? ? [,1] [,2] [,3] > [1,] ? ?1 ? ?2 ? ?3 > [2,] ? ?4 ? ?5 ? ?6 > [3,] ? ?7 ? ?8 ? ?9 > > [[2]] > ? ? [,1] [,2] [,3] > [1,] ? 10 ? 11 ? 12 > [2,] ? 13 ? 14 ? 15 > > [[3]] > ? ? [,1] [,2] [,3] > [1,] ? 16 ? 17 ? 18 > [2,] ? 19 ? 20 ? 21 > [3,] ? 22 ? 23 ? 24 > [4,] ? 25 ? 26 ? 27 > [5,] ? 28 ? 29 ? 30 > > Part1 > What I would like to do is draw an equal number of random row samples > from[[1]],[[2]] and [[3]] (to preserve the structure of [,1][,2],[,3]. > > Part2 > Then I would like to cocerce the list object into something like an array. > > Help scripting out part 1 or 2 would be much appreciated. > > Brian Campbell > > > > > -- > View this message in context: http://r.789695.n4.nabble.com/sampling-rows-from-a-list-tp4526831p4526831.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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.-- Bert Gunter Genentech Nonclinical Biostatistics Internal Contact Info: Phone: 467-7374 Website: http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm
## recreating your data mydata<-list(matrix(1:9, nrow=3, byrow=T), matrix(10:15, nrow=2, byrow=T), matrix(16:30, nrow=5, byrow=T)) ## get the shortest matrix in your list n <- min(unlist(lapply(mydata, nrow))) ## subset the list into random samples of length n out <- lapply(mydata, function(x, n) x[sample(1:nrow(x), n),], n=n) ## this structure is still a list though... ## converting directly to an array: out.array <- array(unlist(out), dim=c(dim(out[[1]]), length(out))) not totally sure about what structure you're wanting in the last step, so if i missed i apologize... Hope that helps, Justin On Mon, Apr 2, 2012 at 11:24 AM, Bcampbell99 <BrianD.Campbell at ec.gc.ca> wrote:> Hi: > > I'm sure this seems like a rudimentary question, but I am not well versed > with R syntax for lists. ?I have a ragged array from which I've removed > records (entire rows) with missing data. ?The functions I used to remove the > missing cases resulted in the generation of an R list class object, that > looks something like this; > > mydata > [[1]] > ? ? [,1] [,2] [,3] > [1,] ? ?1 ? ?2 ? ?3 > [2,] ? ?4 ? ?5 ? ?6 > [3,] ? ?7 ? ?8 ? ?9 > > [[2]] > ? ? [,1] [,2] [,3] > [1,] ? 10 ? 11 ? 12 > [2,] ? 13 ? 14 ? 15 > > [[3]] > ? ? [,1] [,2] [,3] > [1,] ? 16 ? 17 ? 18 > [2,] ? 19 ? 20 ? 21 > [3,] ? 22 ? 23 ? 24 > [4,] ? 25 ? 26 ? 27 > [5,] ? 28 ? 29 ? 30 > > Part1 > What I would like to do is draw an equal number of random row samples > from[[1]],[[2]] and [[3]] (to preserve the structure of [,1][,2],[,3]. > > Part2 > Then I would like to cocerce the list object into something like an array. > > Help scripting out part 1 or 2 would be much appreciated. > > Brian Campbell > > > > > -- > View this message in context: http://r.789695.n4.nabble.com/sampling-rows-from-a-list-tp4526831p4526831.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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.