[R] Create function from string
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.
Re: [R] Create function from string
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
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.