Apologies for not being clearer. The code does what I want, but I was wondering if there is a simpler way of doing this, using substitute()/bquote() directly without the mapply(). Best, Wolfgang -----Original Message----- From: peter dalgaard [mailto:pdalgd at gmail.com] Sent: Tuesday, 26 March, 2019 14:42 To: Viechtbauer, Wolfgang (SP) Cc: r-help mailing list Subject: Re: [R] Substitution in expressions Er, I'm confused. You post some code, the code does something. In which sense is this not what you want? This is slightly more direct:> mapply(function(x,y) as.expression(bquote(.(x)^.(y))), base, expo)expression(1L^2, 2L^2, 3L^3, 4L^3, 5L^4) but I sense that you are looking for something else? -pd> On 26 Mar 2019, at 14:27 , Viechtbauer, Wolfgang (SP) <wolfgang.viechtbauer at maastrichtuniversity.nl> wrote: > > Hi All, > > I am trying to create a vector of expressions, where the elements in the expressions are contained in other vectors (i.e., they should be substituted). I made some attempts with substitute() and bquote(), but couldn't get this to work. My solution so far is: > > base <- 1:5 > expo <- c(2,2,3,3,4) > exvec <- as.expression(unname(mapply(function(x,y) bquote(.(x)^.(y)), base, expo))) > > plot(NA, NA, xlim=c(0,6), ylim=c(0,2)) > text(1:5, 1, exvec) > > Any ideas how I could get this to work with substitute() and/or bquote()? > > Best, > Wolfgang
I think mapply() is fine. You could do> Vectorize(function(x,y) as.expression(bquote(.(x)^.(y))))(base,expo)expression(1L^2, 2L^2, 3L^3, 4L^3, 5L^4) but it is really not that much clearer and does mapply() internally anyway. There's no automatic vectorization in substitute/bquote, so you do need to do it manually. (You might have hoped that Vectorize(function(x,y) substitute(x^y)) would work, but it doesn't) -pd> On 26 Mar 2019, at 15:04 , Viechtbauer, Wolfgang (SP) <wolfgang.viechtbauer at maastrichtuniversity.nl> wrote: > > Apologies for not being clearer. The code does what I want, but I was wondering if there is a simpler way of doing this, using substitute()/bquote() directly without the mapply(). > > Best, > Wolfgang > > -----Original Message----- > From: peter dalgaard [mailto:pdalgd at gmail.com] > Sent: Tuesday, 26 March, 2019 14:42 > To: Viechtbauer, Wolfgang (SP) > Cc: r-help mailing list > Subject: Re: [R] Substitution in expressions > > Er, I'm confused. > > You post some code, the code does something. In which sense is this not what you want? > > This is slightly more direct: > >> mapply(function(x,y) as.expression(bquote(.(x)^.(y))), base, expo) > expression(1L^2, 2L^2, 3L^3, 4L^3, 5L^4) > > but I sense that you are looking for something else? > > -pd > >> On 26 Mar 2019, at 14:27 , Viechtbauer, Wolfgang (SP) <wolfgang.viechtbauer at maastrichtuniversity.nl> wrote: >> >> Hi All, >> >> I am trying to create a vector of expressions, where the elements in the expressions are contained in other vectors (i.e., they should be substituted). I made some attempts with substitute() and bquote(), but couldn't get this to work. My solution so far is: >> >> base <- 1:5 >> expo <- c(2,2,3,3,4) >> exvec <- as.expression(unname(mapply(function(x,y) bquote(.(x)^.(y)), base, expo))) >> >> plot(NA, NA, xlim=c(0,6), ylim=c(0,2)) >> text(1:5, 1, exvec) >> >> Any ideas how I could get this to work with substitute() and/or bquote()? >> >> Best, >> Wolfgang-- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Office: A 4.23 Email: pd.mes at cbs.dk Priv: PDalgd at gmail.com
Ok, thanks. Happy to stick with mapply() then. Best, Wolfgang -----Original Message----- From: peter dalgaard [mailto:pdalgd at gmail.com] Sent: Tuesday, 26 March, 2019 15:40 To: Viechtbauer, Wolfgang (SP) Cc: r-help mailing list Subject: Re: [R] Substitution in expressions I think mapply() is fine. You could do> Vectorize(function(x,y) as.expression(bquote(.(x)^.(y))))(base,expo)expression(1L^2, 2L^2, 3L^3, 4L^3, 5L^4) but it is really not that much clearer and does mapply() internally anyway. There's no automatic vectorization in substitute/bquote, so you do need to do it manually. (You might have hoped that Vectorize(function(x,y) substitute(x^y)) would work, but it doesn't) -pd> On 26 Mar 2019, at 15:04 , Viechtbauer, Wolfgang (SP) <wolfgang.viechtbauer at maastrichtuniversity.nl> wrote: > > Apologies for not being clearer. The code does what I want, but I was wondering if there is a simpler way of doing this, using substitute()/bquote() directly without the mapply(). > > Best, > Wolfgang > > -----Original Message----- > From: peter dalgaard [mailto:pdalgd at gmail.com] > Sent: Tuesday, 26 March, 2019 14:42 > To: Viechtbauer, Wolfgang (SP) > Cc: r-help mailing list > Subject: Re: [R] Substitution in expressions > > Er, I'm confused. > > You post some code, the code does something. In which sense is this not what you want? > > This is slightly more direct: > >> mapply(function(x,y) as.expression(bquote(.(x)^.(y))), base, expo) > expression(1L^2, 2L^2, 3L^3, 4L^3, 5L^4) > > but I sense that you are looking for something else? > > -pd > >> On 26 Mar 2019, at 14:27 , Viechtbauer, Wolfgang (SP) <wolfgang.viechtbauer at maastrichtuniversity.nl> wrote: >> >> Hi All, >> >> I am trying to create a vector of expressions, where the elements in the expressions are contained in other vectors (i.e., they should be substituted). I made some attempts with substitute() and bquote(), but couldn't get this to work. My solution so far is: >> >> base <- 1:5 >> expo <- c(2,2,3,3,4) >> exvec <- as.expression(unname(mapply(function(x,y) bquote(.(x)^.(y)), base, expo))) >> >> plot(NA, NA, xlim=c(0,6), ylim=c(0,2)) >> text(1:5, 1, exvec) >> >> Any ideas how I could get this to work with substitute() and/or bquote()? >> >> Best, >> Wolfgang