[R] Paste a character to an object

Tim Clark mudiver1200 at yahoo.com
Sun Oct 4 09:40:45 CEST 2009


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 <dwinsemius at comcast.net> wrote:

> From: David Winsemius <dwinsemius at comcast.net>
> Subject: Re: [R] Paste a character to an object
> To: "Tim Clark" <mudiver1200 at yahoo.com>
> Cc: r-help at 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 <dwinsemius at comcast.net>
> wrote:
> > 
> >> From: David Winsemius <dwinsemius at comcast.net>
> >> Subject: Re: [R] Paste a character to an object
> >> To: "Tim Clark" <mudiver1200 at yahoo.com>
> >> Cc: r-help at 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 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.
> >> 
> >> 
> > 
> > 
> > 
> 
> David Winsemius, MD
> Heritage Laboratories
> West Hartford, CT
> 
> 







More information about the R-help mailing list