Re: [R] Create function from string

2013-04-16 Thread peter dalgaard
Is this what you are looking for?

 FUN = eval(bquote(function(x) .(parse(text = fstring)[[1]])))
 FUN
function (x) 
x + 2
 FUN(3)
[1] 5



On Apr 16, 2013, at 09:50 , Jon Olav Skoien wrote:

 Dear list,
 
 I am trying to create a function from a string, and have so far solved it 
 with eval(parse()). This works well also when using the newly created 
 function as an argument to another function. The trouble starts when I want 
 to use it with parLapply. Below is a much simplified example:
 
 ##
 fstring = x+2
 FUN = function(x)  eval(parse(text = fstring))
 FUN(3)
 
 FUN2 = function(y, func)   y + func(y)
 FUN2(3,FUN)
 
 # I can also pass FUN as an argument to FUN2 when using foreach and parallel:
 
 library(parallel)
 library(foreach)
 cl = makeCluster(2, outfile = )
 
 ylist = list(1:3,4:6)
 result = foreach(i = 1:2) %dopar% {
  FUN2(ylist[[i]], FUN)
 }
 
 # But now when I wanted to change to parLapply (actually parLapplyLB) fstring 
 is not found anymore:
 parLapply(cl, as.list(1:4), FUN2, func = FUN)
 ##
 
 I assume there is a problem with environments, the question is how to solve 
 this. The cleanest would be to substitute fstring with its content in FUN, 
 but I did not figure out how. Substitute or bquote do not seem to do the 
 trick, although I might not have tried them in the right way. Any suggestions 
 how to solve this, either how to substitute correctly, or to completely avoid 
 the eval(parse())?
 
 Thanks,
 Jon
 
 
 
 -- 
 Jon Olav Skøien
 Joint Research Centre - European Commission
 Institute for Environment and Sustainability (IES)
 Land Resource Management Unit
 
 Via Fermi 2749, TP 440,  I-21027 Ispra (VA), ITALY
 
 jon.sko...@jrc.ec.europa.eu
 
 Disclaimer: Views expressed in this email are those of the individual and do 
 not necessarily represent official views of the European Commission.
 
 __
 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.

-- 
Peter Dalgaard, Professor
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd@cbs.dk  Priv: pda...@gmail.com

__
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] Create function from string

2013-04-16 Thread Jon Olav Skoien

Thanks a lot, that seems to do exactly what I need!

Best wishes,
Jon

On 16-Apr-13 10:21, peter dalgaard wrote:

Is this what you are looking for?


FUN = eval(bquote(function(x) .(parse(text = fstring)[[1]])))
FUN

function (x)
x + 2

FUN(3)

[1] 5



On Apr 16, 2013, at 09:50 , Jon Olav Skoien wrote:


Dear list,

I am trying to create a function from a string, and have so far solved it with 
eval(parse()). This works well also when using the newly created function as an 
argument to another function. The trouble starts when I want to use it with 
parLapply. Below is a much simplified example:

##
fstring = x+2
FUN = function(x)  eval(parse(text = fstring))
FUN(3)

FUN2 = function(y, func)   y + func(y)
FUN2(3,FUN)

# I can also pass FUN as an argument to FUN2 when using foreach and parallel:

library(parallel)
library(foreach)
cl = makeCluster(2, outfile = )

ylist = list(1:3,4:6)
result = foreach(i = 1:2) %dopar% {
  FUN2(ylist[[i]], FUN)
}

# But now when I wanted to change to parLapply (actually parLapplyLB) fstring 
is not found anymore:
parLapply(cl, as.list(1:4), FUN2, func = FUN)
##

I assume there is a problem with environments, the question is how to solve 
this. The cleanest would be to substitute fstring with its content in FUN, but 
I did not figure out how. Substitute or bquote do not seem to do the trick, 
although I might not have tried them in the right way. Any suggestions how to 
solve this, either how to substitute correctly, or to completely avoid the 
eval(parse())?

Thanks,
Jon



--
Jon Olav Skøien
Joint Research Centre - European Commission
Institute for Environment and Sustainability (IES)
Land Resource Management Unit

Via Fermi 2749, TP 440,  I-21027 Ispra (VA), ITALY

jon.sko...@jrc.ec.europa.eu

Disclaimer: Views expressed in this email are those of the individual and do 
not necessarily represent official views of the European Commission.

__
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.



--
Jon Olav Skøien
Joint Research Centre - European Commission
Institute for Environment and Sustainability (IES)
Land Resource Management Unit

Via Fermi 2749, TP 440,  I-21027 Ispra (VA), ITALY

jon.sko...@jrc.ec.europa.eu

Disclaimer: Views expressed in this email are those of the individual and do 
not necessarily represent official views of the European Commission.

__
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.