[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