Re: [R] Paste a character to an object
David, Thanks! You just gave me the answer. All I had to do was: xx-c() for (i in c('100', '75', '50') ) { x-homerange[[1]]$polygons[[i]] ; xx-rbind(x,xx) } xx I didn't know you could use characters as index values in a for loop, or that you could use characters in double brackets instead of using the $ symbol. homerange[[1]]$polygons[['100']] is the same as homerange[[1]]$polygons$'100 The list is actually the output of the NNCH function in Adehabitat. I thought about changing the function first, but looked at the code and couldn't figure it out. I knew there had to be an easier way. I greatly appreciate all your help, Tim Tim Clark Department of Zoology University of Hawaii --- On Sat, 10/3/09, David Winsemius dwinsem...@comcast.net wrote: From: David Winsemius dwinsem...@comcast.net Subject: Re: [R] Paste a character to an object To: Tim Clark mudiver1...@yahoo.com Cc: r-help@r-project.org Date: Saturday, October 3, 2009, 5:43 PM On Oct 3, 2009, at 11:14 PM, Tim Clark wrote: David, Thanks, that helps me in making an example of what I am trying to do. Given the following example, I would like to run through a for loop and obtain a vector of the data only for the 100, 75, and 50 percent values. Is there a way to get this to work, either using paste as in the example below or some other method? homerange - list() homerange[[1]] - test homerange[[1]]$polygons - test2 homerange[[1]]$polygons$`100` - rnorm(20,10,1) homerange[[1]]$polygons$`90` - rnorm(20,10,1) homerange[[1]]$polygons$`75` - rnorm(20,10,1) homerange[[1]]$polygons$`50` - rnorm(20,10,1) xx-c() percent-c(100,75,50) for (i in 1:length(percent)) { x-paste(homerange[[1]]$polygons$ , percent[i]) #This does not work!!! ^?^ And why _would_ you expect an expression ending in a $ to be acceptable to the parser? You did not put quotes around it so the interpreter tried to evaluate it. You are probably looking for the capabilities of the functions get and assign which take string variable and either get the object named by a sstring or assign a vlaue to an object so named. But why are you intent in causing yourself all this pain? (Not to mention asking questions I cannot answer.) Working with expressions involving backquotes is a recipe for hair-pulling and frustration for us normal mortals. Why not call your lists p100, p90, p75, p50? Then everything is simple: xx-c() percent-c(100, 75, 50) for (i in c(p100, p75, p50) ) + { + x-homerange[[1]]$polygons[[i]] ; xx-rbind(x,xx) # could have simplified this + } xx [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] x 9.660935 10.46526 10.75813 8.866064 9.967950 9.987941 10.757160 10.180826 9.992162 x 11.674645 10.51753 10.88061 10.515120 9.440838 11.460845 12.033612 9.318392 9.592026 x 10.057021 10.14339 10.29757 9.164233 8.977280 9.733971 9.965002 9.693649 9.430043 [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] x 11.78904 9.437353 11.910747 10.996167 11.631264 9.386944 9.602160 10.498921 9.09349 x 9.11036 9.546378 11.030323 9.715164 9.500268 11.762440 9.101104 9.610251 10.56210 x 9.62574 12.738020 9.146863 10.497626 10.485520 11.644503 10.303581 11.340263 11.34873 [,19] [,20] x 10.146955 9.640136 x 9.334912 10.101603 x 8.710609 11.265633 The x-paste(...) in this function does not work, and that is what I am stuck on. The result should be a vector the values for the 100,75,and 50 levels, but not the 90 level. Aloha, Tim Clark Department of Zoology University of Hawaii --- On Sat, 10/3/09, David Winsemius dwinsem...@comcast.net wrote: From: David Winsemius dwinsem...@comcast.net Subject: Re: [R] Paste a character to an object To: Tim Clark mudiver1...@yahoo.com Cc: r-help@r-project.org Date: Saturday, October 3, 2009, 4:45 PM On Oct 3, 2009, at 10:26 PM, Tim Clark wrote: Dear List, I can't seem to get a simple paste function to work like I need. I have an object I need to call but it ends in a character string. The object is a list of home range values for a range of percent isopleths. I need to loop through a vector of percent values, so I need to paste the percent as a character on the end of the object variable. I have no idea why the percent is in character form, and I can't use a simple index value (homerange[[1]]$polygons[100]) because there are a variable number of isopleths that are calculated and [100] will not always correspond to 100. So I am stuck. What I want is: homerange[[1]]$polygons$100 What I need is something like the following, but that works: percent-c(100,75,50) p=1 paste(homerange[[1]]$polygons$,percent[p],sep=) Not a reproducible example, but here is some code
Re: [R] Paste a character to an object
On Oct 4, 2009, at 3:40 AM, Tim Clark wrote: David, Thanks! You just gave me the answer. All I had to do was: xx-c() for (i in c('100', '75', '50') ) { x-homerange[[1]]$polygons[[i]] ; xx-rbind(x,xx) } xx I didn't know you could use characters as index values in a for loop, or that you could use characters in double brackets instead of using the $ symbol. Looping over vectors or lists is pretty common. Sometimes you will want to assign their sequence number in which case the loop would look like: for (i in seq_along(c(100', '75', '50') ) { } homerange[[1]]$polygons[['100']] is the same as homerange[[1]]$polygons$'100 Only if you match the quotes (at least on my version of R), and even that was a bit of a surprise to me. The [[ indexing is the more fundamental extraction operator and is more flexible in the loop situation. The list is actually the output of the NNCH function in Adehabitat. I thought about changing the function first, but looked at the code and couldn't figure it out. I knew there had to be an easier way. I greatly appreciate all your help, Tim Tim Clark Department of Zoology University of Hawaii --- On Sat, 10/3/09, David Winsemius dwinsem...@comcast.net wrote: From: David Winsemius dwinsem...@comcast.net Subject: Re: [R] Paste a character to an object To: Tim Clark mudiver1...@yahoo.com Cc: r-help@r-project.org Date: Saturday, October 3, 2009, 5:43 PM On Oct 3, 2009, at 11:14 PM, Tim Clark wrote: David, Thanks, that helps me in making an example of what I am trying to do. Given the following example, I would like to run through a for loop and obtain a vector of the data only for the 100, 75, and 50 percent values. Is there a way to get this to work, either using paste as in the example below or some other method? homerange - list() homerange[[1]] - test homerange[[1]]$polygons - test2 homerange[[1]]$polygons$`100` - rnorm(20,10,1) homerange[[1]]$polygons$`90` - rnorm(20,10,1) homerange[[1]]$polygons$`75` - rnorm(20,10,1) homerange[[1]]$polygons$`50` - rnorm(20,10,1) xx-c() percent-c(100,75,50) for (i in 1:length(percent)) { x-paste(homerange[[1]]$polygons$ ,percent[i]) #This does not work!!! ^?^ And why _would_ you expect an expression ending in a $ to be acceptable to the parser? You did not put quotes around it so the interpreter tried to evaluate it. You are probably looking for the capabilities of the functions get and assign which take string variable and either get the object named by a sstring or assign a vlaue to an object so named. But why are you intent in causing yourself all this pain? (Not to mention asking questions I cannot answer.) Working with expressions involving backquotes is a recipe for hair-pulling and frustration for us normal mortals. Why not call your lists p100, p90, p75, p50? Then everything is simple: xx-c() percent-c(100, 75, 50) for (i in c(p100, p75, p50) ) + { + x-homerange[[1]]$polygons[[i]] ; xx-rbind(x,xx) # could have simplified this + } xx [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] x 9.660935 10.46526 10.75813 8.866064 9.967950 9.987941 10.757160 10.180826 9.992162 x 11.674645 10.51753 10.88061 10.515120 9.440838 11.460845 12.033612 9.318392 9.592026 x 10.057021 10.14339 10.29757 9.164233 8.977280 9.733971 9.965002 9.693649 9.430043 [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17][,18] x 11.78904 9.437353 11.910747 10.996167 11.631264 9.386944 9.602160 10.498921 9.09349 x 9.11036 9.546378 11.030323 9.715164 9.500268 11.762440 9.101104 9.610251 10.56210 x 9.62574 12.738020 9.146863 10.497626 10.485520 11.644503 10.303581 11.340263 11.34873 [,19] [,20] x 10.146955 9.640136 x 9.334912 10.101603 x 8.710609 11.265633 The x-paste(...) in this function does not work, and that is what I am stuck on. The result should be a vector the values for the 100,75,and 50 levels, but not the 90 level. Aloha, Tim Clark Department of Zoology University of Hawaii --- On Sat, 10/3/09, David Winsemius dwinsem...@comcast.net wrote: From: David Winsemius dwinsem...@comcast.net Subject: Re: [R] Paste a character to an object To: Tim Clark mudiver1...@yahoo.com Cc: r-help@r-project.org Date: Saturday, October 3, 2009, 4:45 PM On Oct 3, 2009, at 10:26 PM, Tim Clark wrote: Dear List, I can't seem to get a simple paste function to work like I need. I have an object I need to call but it ends in a character string. The object is a list of home range values for a range of percent isopleths. I need to loop through a vector of percent values, so I need to paste the percent as a character on the end of the object variable. I have no idea why the percent is in character form, and I can't use a simple index value (homerange[[1]]$polygons[100]) because there are a variable number of isopleths that are calculated and [100] will not always correspond to 100. So I am stuck
[R] Paste a character to an object
Dear List, I can't seem to get a simple paste function to work like I need. I have an object I need to call but it ends in a character string. The object is a list of home range values for a range of percent isopleths. I need to loop through a vector of percent values, so I need to paste the percent as a character on the end of the object variable. I have no idea why the percent is in character form, and I can't use a simple index value (homerange[[1]]$polygons[100]) because there are a variable number of isopleths that are calculated and [100] will not always correspond to 100. So I am stuck. What I want is: homerange[[1]]$polygons$100 What I need is something like the following, but that works: percent-c(100,75,50) p=1 paste(homerange[[1]]$polygons$,percent[p],sep=) Thanks for the help, Tim Tim Clark Department of Zoology University of Hawaii __ 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.
Re: [R] Paste a character to an object
On Oct 3, 2009, at 10:26 PM, Tim Clark wrote: Dear List, I can't seem to get a simple paste function to work like I need. I have an object I need to call but it ends in a character string. The object is a list of home range values for a range of percent isopleths. I need to loop through a vector of percent values, so I need to paste the percent as a character on the end of the object variable. I have no idea why the percent is in character form, and I can't use a simple index value (homerange[[1]]$polygons[100]) because there are a variable number of isopleths that are calculated and [100] will not always correspond to 100. So I am stuck. What I want is: homerange[[1]]$polygons$100 What I need is something like the following, but that works: percent-c(100,75,50) p=1 paste(homerange[[1]]$polygons$,percent[p],sep=) Not a reproducible example, but here is some code that shows that it is possible to construct names that would otherwise be invalid due to having numerals as a first character by using back-quotes: percent-c(100,75,50) p=1 paste(homerange[[1]]$polygons$,percent[p],sep=) Error: syntax error homerange - list() homerange[[1]] - test homerange[[1]]$polygons - test2 Warning message: In homerange[[1]]$polygons - test2 : Coercing LHS to a list homerange [[1]] [[1]][[1]] [1] test [[1]]$polygons [1] test2 homerange[[1]]$polygons$`100` - percent[1] Warning message: In homerange[[1]]$polygons$`100` - percent[1] : Coercing LHS to a list homerange[[1]]$polygons$`100` [1] 100 -- David Winsemius Thanks for the help, Tim Tim Clark Department of Zoology University of Hawaii __ 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. __ 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.
Re: [R] Paste a character to an object
David, Thanks, that helps me in making an example of what I am trying to do. Given the following example, I would like to run through a for loop and obtain a vector of the data only for the 100, 75, and 50 percent values. Is there a way to get this to work, either using paste as in the example below or some other method? homerange - list() homerange[[1]] - test homerange[[1]]$polygons - test2 homerange[[1]]$polygons$`100` - rnorm(20,10,1) homerange[[1]]$polygons$`90` - rnorm(20,10,1) homerange[[1]]$polygons$`75` - rnorm(20,10,1) homerange[[1]]$polygons$`50` - rnorm(20,10,1) xx-c() percent-c(100,75,50) for (i in 1:length(percent)) { x-paste(homerange[[1]]$polygons$,percent[i]) #This does not work!!! xx-rbind(x,xx) } The x-paste(...) in this function does not work, and that is what I am stuck on. The result should be a vector the values for the 100,75,and 50 levels, but not the 90 level. Aloha, Tim Tim Clark Department of Zoology University of Hawaii --- On Sat, 10/3/09, David Winsemius dwinsem...@comcast.net wrote: From: David Winsemius dwinsem...@comcast.net Subject: Re: [R] Paste a character to an object To: Tim Clark mudiver1...@yahoo.com Cc: r-help@r-project.org Date: Saturday, October 3, 2009, 4:45 PM On Oct 3, 2009, at 10:26 PM, Tim Clark wrote: Dear List, I can't seem to get a simple paste function to work like I need. I have an object I need to call but it ends in a character string. The object is a list of home range values for a range of percent isopleths. I need to loop through a vector of percent values, so I need to paste the percent as a character on the end of the object variable. I have no idea why the percent is in character form, and I can't use a simple index value (homerange[[1]]$polygons[100]) because there are a variable number of isopleths that are calculated and [100] will not always correspond to 100. So I am stuck. What I want is: homerange[[1]]$polygons$100 What I need is something like the following, but that works: percent-c(100,75,50) p=1 paste(homerange[[1]]$polygons$,percent[p],sep=) Not a reproducible example, but here is some code that shows that it is possible to construct names that would otherwise be invalid due to having numerals as a first character by using back-quotes: percent-c(100,75,50) p=1 paste(homerange[[1]]$polygons$,percent[p],sep=) Error: syntax error homerange - list() homerange[[1]] - test homerange[[1]]$polygons - test2 Warning message: In homerange[[1]]$polygons - test2 : Coercing LHS to a list homerange [[1]] [[1]][[1]] [1] test [[1]]$polygons [1] test2 homerange[[1]]$polygons$`100` - percent[1] Warning message: In homerange[[1]]$polygons$`100` - percent[1] : Coercing LHS to a list homerange[[1]]$polygons$`100` [1] 100 --David Winsemius Thanks for the help, Tim Tim Clark Department of Zoology University of Hawaii __ 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. __ 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.
Re: [R] Paste a character to an object
On Oct 3, 2009, at 11:14 PM, Tim Clark wrote: David, Thanks, that helps me in making an example of what I am trying to do. Given the following example, I would like to run through a for loop and obtain a vector of the data only for the 100, 75, and 50 percent values. Is there a way to get this to work, either using paste as in the example below or some other method? homerange - list() homerange[[1]] - test homerange[[1]]$polygons - test2 homerange[[1]]$polygons$`100` - rnorm(20,10,1) homerange[[1]]$polygons$`90` - rnorm(20,10,1) homerange[[1]]$polygons$`75` - rnorm(20,10,1) homerange[[1]]$polygons$`50` - rnorm(20,10,1) xx-c() percent-c(100,75,50) for (i in 1:length(percent)) { x-paste(homerange[[1]]$polygons$,percent[i]) #This does not work!!! ^?^ And why _would_ you expect an expression ending in a $ to be acceptable to the parser? You did not put quotes around it so the interpreter tried to evaluate it. You are probably looking for the capabilities of the functions get and assign which take string variable and either get the object named by a sstring or assign a vlaue to an object so named. But why are you intent in causing yourself all this pain? (Not to mention asking questions I cannot answer.) Working with expressions involving backquotes is a recipe for hair-pulling and frustration for us normal mortals. Why not call your lists p100, p90, p75, p50? Then everything is simple: xx-c() percent-c(100, 75, 50) for (i in c(p100, p75, p50) ) + { + x-homerange[[1]]$polygons[[i]] ; xx-rbind(x,xx) # could have simplified this + } xx [,1] [,2] [,3] [,4] [,5] [,6] [, 7] [,8] [,9] x 9.660935 10.46526 10.75813 8.866064 9.967950 9.987941 10.757160 10.180826 9.992162 x 11.674645 10.51753 10.88061 10.515120 9.440838 11.460845 12.033612 9.318392 9.592026 x 10.057021 10.14339 10.29757 9.164233 8.977280 9.733971 9.965002 9.693649 9.430043 [,10] [,11] [,12] [,13] [,14] [,15] [, 16] [,17][,18] x 11.78904 9.437353 11.910747 10.996167 11.631264 9.386944 9.602160 10.498921 9.09349 x 9.11036 9.546378 11.030323 9.715164 9.500268 11.762440 9.101104 9.610251 10.56210 x 9.62574 12.738020 9.146863 10.497626 10.485520 11.644503 10.303581 11.340263 11.34873 [,19] [,20] x 10.146955 9.640136 x 9.334912 10.101603 x 8.710609 11.265633 The x-paste(...) in this function does not work, and that is what I am stuck on. The result should be a vector the values for the 100,75,and 50 levels, but not the 90 level. Aloha, Tim Clark Department of Zoology University of Hawaii --- On Sat, 10/3/09, David Winsemius dwinsem...@comcast.net wrote: From: David Winsemius dwinsem...@comcast.net Subject: Re: [R] Paste a character to an object To: Tim Clark mudiver1...@yahoo.com Cc: r-help@r-project.org Date: Saturday, October 3, 2009, 4:45 PM On Oct 3, 2009, at 10:26 PM, Tim Clark wrote: Dear List, I can't seem to get a simple paste function to work like I need. I have an object I need to call but it ends in a character string. The object is a list of home range values for a range of percent isopleths. I need to loop through a vector of percent values, so I need to paste the percent as a character on the end of the object variable. I have no idea why the percent is in character form, and I can't use a simple index value (homerange[[1]]$polygons[100]) because there are a variable number of isopleths that are calculated and [100] will not always correspond to 100. So I am stuck. What I want is: homerange[[1]]$polygons$100 What I need is something like the following, but that works: percent-c(100,75,50) p=1 paste(homerange[[1]]$polygons$,percent[p],sep=) Not a reproducible example, but here is some code that shows that it is possible to construct names that would otherwise be invalid due to having numerals as a first character by using back-quotes: percent-c(100,75,50) p=1 paste(homerange[[1]]$polygons$,percent[p],sep=) Error: syntax error homerange - list() homerange[[1]] - test homerange[[1]]$polygons - test2 Warning message: In homerange[[1]]$polygons - test2 : Coercing LHS to a list homerange [[1]] [[1]][[1]] [1] test [[1]]$polygons [1] test2 homerange[[1]]$polygons$`100` - percent[1] Warning message: In homerange[[1]]$polygons$`100` - percent[1] : Coercing LHS to a list homerange[[1]]$polygons$`100` [1] 100 --David Winsemius Thanks for the help, Tim Tim Clark Department of Zoology University of Hawaii __ 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. David Winsemius, MD Heritage Laboratories West Hartford, CT