Hello! I have a cbind type question, please: Suppose I have the following: dog <- 1:3 cat <- 2:4 tree <- 5:7 and a character vector big.char <- c("dog","cat","tree") I want to end up with a matrix that is a "cbind" of dog, cat, and tree. This is a toy example. There will be a bunch of variables. I experimented with "do.call", but all I got was 1 2 3 Any suggestions would be much appreciated. I still think that do.call might be the key, but I'm not sure. R Version 3-1.3, Windows 7. Thanks, Erin -- Erin Hodgess Associate Professor Department of Mathematical and Statistics University of Houston - Downtown mailto: erinm.hodgess at gmail.com [[alternative HTML version deleted]]
Is this what you're looking for?> dog <- 1:3> bat <- 2:4> tree <- 5:7> big.char <- c("dog","bat","tree")> do.call(cbind,lapply(big.char, get))[,1] [,2] [,3] [1,] 1 2 5 [2,] 2 3 6 [3,] 3 4 7>On Thu, Apr 23, 2015 at 3:41 PM, Erin Hodgess <erinm.hodgess at gmail.com> wrote:> Hello! > > I have a cbind type question, please: Suppose I have the following: > > dog <- 1:3 > cat <- 2:4 > tree <- 5:7 > > and a character vector > big.char <- c("dog","cat","tree") > > I want to end up with a matrix that is a "cbind" of dog, cat, and tree. > This is a toy example. There will be a bunch of variables. > > I experimented with "do.call", but all I got was > 1 > 2 > 3 > > Any suggestions would be much appreciated. I still think that do.call > might be the key, but I'm not sure. > > R Version 3-1.3, Windows 7. > > Thanks, > Erin > > > -- > Erin Hodgess > Associate Professor > Department of Mathematical and Statistics > University of Houston - Downtown > mailto: erinm.hodgess at gmail.com > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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.
You could do something tricky like > do.call(cbind, lapply(big.char, as.name)) dog cat tree [1,] 1 2 5 [2,] 2 3 6 [3,] 3 4 7 but you are usually better off creating these things as part of a list and passing that to do.call(cbind, list). There is a slight danger of using do.call with cbind. If your list has a component with the unlikely name 'deparse.level', then that will be taken as cbind's deparse.level argument, not as a column of the matrix to be made. Bill Dunlap TIBCO Software wdunlap tibco.com On Thu, Apr 23, 2015 at 3:41 PM, Erin Hodgess <erinm.hodgess at gmail.com> wrote:> Hello! > > I have a cbind type question, please: Suppose I have the following: > > dog <- 1:3 > cat <- 2:4 > tree <- 5:7 > > and a character vector > big.char <- c("dog","cat","tree") > > I want to end up with a matrix that is a "cbind" of dog, cat, and tree. > This is a toy example. There will be a bunch of variables. > > I experimented with "do.call", but all I got was > 1 > 2 > 3 > > Any suggestions would be much appreciated. I still think that do.call > might be the key, but I'm not sure. > > R Version 3-1.3, Windows 7. > > Thanks, > Erin > > > -- > Erin Hodgess > Associate Professor > Department of Mathematical and Statistics > University of Houston - Downtown > mailto: erinm.hodgess at gmail.com > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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]]
These are great! Thank you! On Thu, Apr 23, 2015 at 7:14 PM, William Dunlap <wdunlap at tibco.com> wrote:> You could do something tricky like > > do.call(cbind, lapply(big.char, as.name)) > dog cat tree > [1,] 1 2 5 > [2,] 2 3 6 > [3,] 3 4 7 > but you are usually better off creating these things as part of a list > and passing that to do.call(cbind, list). > > There is a slight danger of using do.call with cbind. If your > list has a component with the unlikely name 'deparse.level', > then that will be taken as cbind's deparse.level argument, > not as a column of the matrix to be made. > > > Bill Dunlap > TIBCO Software > wdunlap tibco.com > > On Thu, Apr 23, 2015 at 3:41 PM, Erin Hodgess <erinm.hodgess at gmail.com> > wrote: > >> Hello! >> >> I have a cbind type question, please: Suppose I have the following: >> >> dog <- 1:3 >> cat <- 2:4 >> tree <- 5:7 >> >> and a character vector >> big.char <- c("dog","cat","tree") >> >> I want to end up with a matrix that is a "cbind" of dog, cat, and tree. >> This is a toy example. There will be a bunch of variables. >> >> I experimented with "do.call", but all I got was >> 1 >> 2 >> 3 >> >> Any suggestions would be much appreciated. I still think that do.call >> might be the key, but I'm not sure. >> >> R Version 3-1.3, Windows 7. >> >> Thanks, >> Erin >> >> >> -- >> Erin Hodgess >> Associate Professor >> Department of Mathematical and Statistics >> University of Houston - Downtown >> mailto: erinm.hodgess at gmail.com >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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. >> > >-- Erin Hodgess Associate Professor Department of Mathematical and Statistics University of Houston - Downtown mailto: erinm.hodgess at gmail.com [[alternative HTML version deleted]]
Perhaps:> dog <- 1:3 > cat <- 2:4 > tree <- 5:7 > big.char <- cbind(dog,cat,tree) > big.chardog cat tree [1,] 1 2 5 [2,] 2 3 6 [3,] 3 4 7> colnames(big.char)<-c("dog","cat","tree") > big.chardog cat tree [1,] 1 2 5 [2,] 2 3 6 [3,] 3 4 7 Clint Bowman INTERNET: clint at ecy.wa.gov Air Quality Modeler INTERNET: clint at math.utah.edu Department of Ecology VOICE: (360) 407-6815 PO Box 47600 FAX: (360) 407-7534 Olympia, WA 98504-7600 USPS: PO Box 47600, Olympia, WA 98504-7600 Parcels: 300 Desmond Drive, Lacey, WA 98503-1274 On Thu, 23 Apr 2015, Erin Hodgess wrote:> Hello! > > I have a cbind type question, please: Suppose I have the following: > > dog <- 1:3 > cat <- 2:4 > tree <- 5:7 > > and a character vector > big.char <- c("dog","cat","tree") > > I want to end up with a matrix that is a "cbind" of dog, cat, and tree. > This is a toy example. There will be a bunch of variables. > > I experimented with "do.call", but all I got was > 1 > 2 > 3 > > Any suggestions would be much appreciated. I still think that do.call > might be the key, but I'm not sure. > > R Version 3-1.3, Windows 7. > > Thanks, > Erin > > > -- > Erin Hodgess > Associate Professor > Department of Mathematical and Statistics > University of Houston - Downtown > mailto: erinm.hodgess at gmail.com > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. >
This works for me... get0 = function(x) get(x,pos=1) sapply(big.char, get0) The extra step seems necessary because without it, get() gets base::cat() instead of cat. cheers, Steve -----Original Message----- From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Erin Hodgess Sent: Friday, 24 April 2015 10:41a To: R help Subject: [R] cbind question, please Hello! I have a cbind type question, please: Suppose I have the following: dog <- 1:3 cat <- 2:4 tree <- 5:7 and a character vector big.char <- c("dog","cat","tree") I want to end up with a matrix that is a "cbind" of dog, cat, and tree. This is a toy example. There will be a bunch of variables. I experimented with "do.call", but all I got was 1 2 3 Any suggestions would be much appreciated. I still think that do.call might be the key, but I'm not sure. R Version 3-1.3, Windows 7. Thanks, Erin -- Erin Hodgess Associate Professor Department of Mathematical and Statistics University of Houston - Downtown mailto: erinm.hodgess at gmail.com [[alternative HTML version deleted]] ______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.
Hi Erin, Well, if I do this: dog <- 1:3 cat <- 2:4 tree <- 5:7 dct<-cbind(dog,cat,tree) I get this: dct dog cat tree [1,] 1 2 5 [2,] 2 3 6 [3,] 3 4 7 If I assume that you want to include the character vector as well: rownames(dct)<-big.char dct Jim On Fri, Apr 24, 2015 at 8:41 AM, Erin Hodgess <erinm.hodgess at gmail.com> wrote:> Hello! > > I have a cbind type question, please: Suppose I have the following: > > dog <- 1:3 > cat <- 2:4 > tree <- 5:7 > > and a character vector > big.char <- c("dog","cat","tree") > > I want to end up with a matrix that is a "cbind" of dog, cat, and tree. > This is a toy example. There will be a bunch of variables. > > I experimented with "do.call", but all I got was > 1 > 2 > 3 > > Any suggestions would be much appreciated. I still think that do.call > might be the key, but I'm not sure. > > R Version 3-1.3, Windows 7. > > Thanks, > Erin > > > -- > Erin Hodgess > Associate Professor > Department of Mathematical and Statistics > University of Houston - Downtown > mailto: erinm.hodgess at gmail.com > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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.
What are you expecting? dog <- 1:3 cat <- 2:4 tree <- 5:7 big.char <- c("dog","cat","tree") xx <- cbind(dog, cat, tree, big.char) gives me xx1 <- structure(c("1", "2", "3", "2", "3", "4", "5", "6", "7", "dog", "cat", "tree"), .Dim = 3:4, .Dimnames = list(NULL, c("dog", "cat", "tree", "big.char"))) John Kane Kingston ON Canada> -----Original Message----- > From: erinm.hodgess at gmail.com > Sent: Thu, 23 Apr 2015 18:41:05 -0400 > To: r-help at stat.math.ethz.ch > Subject: [R] cbind question, please > > Hello! > > I have a cbind type question, please: Suppose I have the following: > > dog <- 1:3 > cat <- 2:4 > tree <- 5:7 > > and a character vector > big.char <- c("dog","cat","tree") > > I want to end up with a matrix that is a "cbind" of dog, cat, and tree. > This is a toy example. There will be a bunch of variables. > > I experimented with "do.call", but all I got was > 1 > 2 > 3 > > Any suggestions would be much appreciated. I still think that do.call > might be the key, but I'm not sure. > > R Version 3-1.3, Windows 7. > > Thanks, > Erin > > > -- > Erin Hodgess > Associate Professor > Department of Mathematical and Statistics > University of Houston - Downtown > mailto: erinm.hodgess at gmail.com > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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.____________________________________________________________ FREE 3D MARINE AQUARIUM SCREENSAVER - Watch dolphins, sharks & orcas on your desktop!
Here is the big picture. I have a character vector with all of the names of the variables in it. I want to "cbind" all of the variables to create a matrix. Doing 3 is straightforward, but many, not so much. Hence my question. Thanks so much for your answers! Sincerely, Erin On Thu, Apr 23, 2015 at 7:44 PM, John Kane <jrkrideau at inbox.com> wrote:> What are you expecting? > > dog <- 1:3 > cat <- 2:4 > tree <- 5:7 > big.char <- c("dog","cat","tree") > > xx <- cbind(dog, cat, tree, big.char) > > gives me > xx1 <- structure(c("1", "2", "3", "2", "3", "4", "5", "6", "7", "dog", > "cat", "tree"), .Dim = 3:4, .Dimnames = list(NULL, c("dog", "cat", > "tree", "big.char"))) > > > > John Kane > Kingston ON Canada > > > > -----Original Message----- > > From: erinm.hodgess at gmail.com > > Sent: Thu, 23 Apr 2015 18:41:05 -0400 > > To: r-help at stat.math.ethz.ch > > Subject: [R] cbind question, please > > > > Hello! > > > > I have a cbind type question, please: Suppose I have the following: > > > > dog <- 1:3 > > cat <- 2:4 > > tree <- 5:7 > > > > and a character vector > > big.char <- c("dog","cat","tree") > > > > I want to end up with a matrix that is a "cbind" of dog, cat, and tree. > > This is a toy example. There will be a bunch of variables. > > > > I experimented with "do.call", but all I got was > > 1 > > 2 > > 3 > > > > Any suggestions would be much appreciated. I still think that do.call > > might be the key, but I'm not sure. > > > > R Version 3-1.3, Windows 7. > > > > Thanks, > > Erin > > > > > > -- > > Erin Hodgess > > Associate Professor > > Department of Mathematical and Statistics > > University of Houston - Downtown > > mailto: erinm.hodgess at gmail.com > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > 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. > > ____________________________________________________________ > FREE 3D MARINE AQUARIUM SCREENSAVER - Watch dolphins, sharks & orcas on > your desktop! > Check it out at http://www.inbox.com/marineaquarium > > >-- Erin Hodgess Associate Professor Department of Mathematical and Statistics University of Houston - Downtown mailto: erinm.hodgess at gmail.com [[alternative HTML version deleted]]
On 24/04/15 10:41, Erin Hodgess wrote:> Hello! > > I have a cbind type question, please: Suppose I have the following: > > dog <- 1:3 > cat <- 2:4 > tree <- 5:7 > > and a character vector > big.char <- c("dog","cat","tree") > > I want to end up with a matrix that is a "cbind" of dog, cat, and tree. > This is a toy example. There will be a bunch of variables. > > I experimented with "do.call", but all I got was > 1 > 2 > 3I don't understand how you managed to get *that*. When I did the "obvious" thing --- do.call(cbind,as.list(big.char)) --- I got (as expected :-) ) [,1] [,2] [,3] [1,] "dog" "cat" "tree"> > Any suggestions would be much appreciated. I still think that do.call > might be the key, but I'm not sure. > > R Version 3-1.3, Windows 7.do.call(cbind,lapply(big.char,get,envir=.GlobalEnv)) Note: I had to throw in the specification of "envir" otherwise get() got the cat() function from "base" rather than your vector "cat". Probably not a problem for your real application; shouldn't hurt, but. Another salutary example of why it's not a good idea to give data sets names that are names of R built-ins. cheers, Rolf -- Rolf Turner Technical Editor ANZJS Department of Statistics University of Auckland Phone: +64-9-373-7599 ext. 88276 Home phone: +64-9-480-4619
On Apr 23, 2015, at 5:41 PM, Erin Hodgess <erinm.hodgess at gmail.com> wrote:> > Hello! > > I have a cbind type question, please: Suppose I have the following: > > dog <- 1:3 > cat <- 2:4 > tree <- 5:7 > > and a character vector > big.char <- c("dog","cat","tree") > > I want to end up with a matrix that is a "cbind" of dog, cat, and tree. > This is a toy example. There will be a bunch of variables. > > I experimented with "do.call", but all I got was > 1 > 2 > 3 > > Any suggestions would be much appreciated. I still think that do.call > might be the key, but I'm not sure. > > R Version 3-1.3, Windows 7. > > Thanks, > Erin >Hi Erin, One approach could be:> sapply(big.char, get, mode = "integer")dog cat tree [1,] 1 2 5 [2,] 2 3 6 [3,] 3 4 7 or> sapply(big.char, get, mode = "numeric")dog cat tree [1,] 1 2 5 [2,] 2 3 6 [3,] 3 4 7 Note that I used the ?mode' argument to get(). You used ?cat? as the name of one of the objects and of course, there is an R function cat(). By default for get(), mode = ?any?, which would otherwise result in:> sapply(big.char, get)$dog [1] 1 2 3 $cat function (..., file = "", sep = " ", fill = FALSE, labels = NULL, append = FALSE) { if (is.character(file)) if (file == "") file <- stdout() else if (substring(file, 1L, 1L) == "|") { file <- pipe(substring(file, 2L), "w") on.exit(close(file)) } else { file <- file(file, ifelse(append, "a", "w")) on.exit(close(file)) } .Internal(cat(list(...), file, sep, fill, labels, append)) } <bytecode: 0x7fe942d78f78> <environment: namespace:base> $tree [1] 5 6 7 In the above, the cat() function body is returned, instead of the vector cat. So just need to be cautious. An alternative approach, depending upon where your vectors are stored, might be:> sapply(big.char, get, pos = 1)dog cat tree [1,] 1 2 5 [2,] 2 3 6 [3,] 3 4 7 which specifies which environment to search for the named objects and the cat() function is not returned since it is in namespace:base. See ?get Regards, Marc Schwartz
Hello Erin, I think you have explain your goal more detailed. Maybe I am completely lost but as far as I understand now you only need the command cbind: m1 <- cbind(dog, dat, tree) dog cat tree [1,] 1 2 5 [2,] 2 3 6 [3,] 3 4 7 But I can't imagine that is the solution you are looking for. Cheers David On 24.04.2015 00:41, Erin Hodgess wrote:> Hello! > > I have a cbind type question, please: Suppose I have the following: > > dog <- 1:3 > cat <- 2:4 > tree <- 5:7 > > and a character vector > big.char <- c("dog","cat","tree") > > I want to end up with a matrix that is a "cbind" of dog, cat, and tree. > This is a toy example. There will be a bunch of variables. > > I experimented with "do.call", but all I got was > 1 > 2 > 3 > > Any suggestions would be much appreciated. I still think that do.call > might be the key, but I'm not sure. > > R Version 3-1.3, Windows 7. > > Thanks, > Erin > >-- David Kienle Department of Biogeography University of Bayreuth GEO II, Rm 003
Hello, I am not sure what you mean by a matrix. If you want to have a matrix, use the function matrix, (matrix(c(dog,cat,tree),3)) but I have the feeling you really want a data frame as you are talking about variables. In that case simply use mydataframe <- data.frame(dog,cat,tree) If you are not sure what you want, please read the intro to R pdf which is included in your installed R library. Best regards, daniel ________________________________________ Felad?: R-help [r-help-bounces at r-project.org] ; meghatalmazó: Erin Hodgess [erinm.hodgess at gmail.com] K?ldve: 2015. ?prilis 24. 0:41 To: R help T?rgy: [R] cbind question, please Hello! I have a cbind type question, please: Suppose I have the following: dog <- 1:3 cat <- 2:4 tree <- 5:7 and a character vector big.char <- c("dog","cat","tree") I want to end up with a matrix that is a "cbind" of dog, cat, and tree. This is a toy example. There will be a bunch of variables. I experimented with "do.call", but all I got was 1 2 3 Any suggestions would be much appreciated. I still think that do.call might be the key, but I'm not sure. R Version 3-1.3, Windows 7. Thanks, Erin -- Erin Hodgess Associate Professor Department of Mathematical and Statistics University of Houston - Downtown mailto: erinm.hodgess at gmail.com [[alternative HTML version deleted]] ______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.
I am amazed at the number of rather obtuse misunderstandings of the actual nature of Erin's question. The suggestion that Erin should read the intro to R made me smile. Erin is a long time and highly sophisticated user of R; she has no need to read the intro. The person who made that suggestion should have read her question more thoughtfully. Also I liked Steve Taylor's and Marc Swartz's nifty solutions that use sapply(); much sexier than my rather kludgy effort using do.call(). Berwin Turlach's combination of do.call() and sapply() is pretty sexy too. cheers, Rolf Turner -- Rolf Turner Technical Editor ANZJS Department of Statistics University of Auckland Phone: +64-9-373-7599 ext. 88276 Home phone: +64-9-480-4619
>>>>> Steve Taylor <steve.taylor at aut.ac.nz> >>>>> on Thu, 23 Apr 2015 23:32:00 +0000 writes:> This works for me... > get0 = function(x) get(x,pos=1) > sapply(big.char, get0) Note that get0() is a _ somewhat important for efficient code _ new function since R 3.2.0 so you'd rather call your functions differently... > The extra step seems necessary because without it, get() gets base::cat() instead of cat. > cheers, > Steve > -----Original Message----- > From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Erin Hodgess > Sent: Friday, 24 April 2015 10:41a > To: R help > Subject: [R] cbind question, please > Hello! > I have a cbind type question, please: Suppose I have the following: > dog <- 1:3 > cat <- 2:4 > tree <- 5:7 > and a character vector > big.char <- c("dog","cat","tree") > I want to end up with a matrix that is a "cbind" of dog, cat, and tree. > This is a toy example. There will be a bunch of variables. > I experimented with "do.call", but all I got was > 1 > 2 > 3 > Any suggestions would be much appreciated. I still think that do.call > might be the key, but I'm not sure. > R Version 3-1.3, Windows 7. > Thanks, > Erin > -- > Erin Hodgess > Associate Professor > Department of Mathematical and Statistics > University of Houston - Downtown > mailto: erinm.hodgess at gmail.com > [[alternative HTML version deleted]] > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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.