[R] How can I run a function to a piece of text?
Dear users, I got really stuck trying to apply a function to a piece of code that I created using different string functions. To make things really easy, this is a wee example: x-c(1:10) script-x, trim = 0, na.rm = FALSE##script created by a number of paste() and rep() steps mean(script) ##function that I want to apply: doesn't work Is there any way to convert the script class so that the function mean() can read it as if it were text typed in the console? Thanks and have a superb day Javier -- View this message in context: http://www.nabble.com/How-can-I-run-a-function-to-a-piece-of-text--tp25930315p25930315.html Sent from the R help mailing list archive at Nabble.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] How can I run a function to a piece of text?
Based solely on what you told us, this can be done using eval(parse(text=...)) cmd - sprintf(mean(%s), script) eval(parse(text = cmd)) However, with more context, there may be a better solution. See, for example, install.packages(fortunes) library(fortunes) fortune(parse()) HTH, --sundar On Fri, Oct 16, 2009 at 11:39 AM, Javier PB j.perez-barbe...@macaulay.ac.uk wrote: Dear users, I got really stuck trying to apply a function to a piece of code that I created using different string functions. To make things really easy, this is a wee example: x-c(1:10) script-x, trim = 0, na.rm = FALSE ##script created by a number of paste() and rep() steps mean(script) ##function that I want to apply: doesn't work Is there any way to convert the script class so that the function mean() can read it as if it were text typed in the console? Thanks and have a superb day Javier -- View this message in context: http://www.nabble.com/How-can-I-run-a-function-to-a-piece-of-text--tp25930315p25930315.html Sent from the R help mailing list archive at Nabble.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. __ 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] How can I run a function to a piece of text?
Javier PB wrote: I got really stuck trying to apply a function to a piece of code that I created using different string functions. To make things really easy, this is a wee example: x-c(1:10) script-x, trim = 0, na.rm = FALSE##script created by a number of paste() and rep() steps mean(script) ##function that I want to apply: doesn't work Is there any way to convert the script class so that the function mean() can read it as if it were text typed in the console? That's a really tricky question. I think that there are two solutions, both of them pass through an alternate way of calling functions. Namely: for each function that can be called as f(x=a, y=b, z=c), you can use do.call(f, list(x=a,y=b,z=c)) or even do.call(f, list(a, b, c)). Let's test this. f - function(x, y) x + 2 * y f(1, 2) do.call(f, list(1, 2)) So far so good. The problem now is that you don't have a list(x, trim = 0, na.rm = FALSE), but a string! But it's a piece of cake to convert a string to an R object (but only after you know the magic words, and they are eval(parse(text=string))): eval(parse(text = paste(list(, script, ), sep = )) So, a slow and didatical(sp?) solution to your problem is: x-c(1:10) script-x, trim = 0, na.rm = FALSE # Step 1: convert script to a list - but still as a string script.list.string - paste(list(, script, ), sep = ) # Step 2: convert script to a list script.list - eval(parse(text = script.list.string)) # Step 3: call the function do.call(mean, script.list) The second way (and simpler) is to enclose the mean function into the script string, and then invoke the magic words: x-c(1:10) script-x, trim = 0, na.rm = FALSE # Step 1: convert script to the calling of mean - but still as a string mean.string - paste(mean(, script, ), sep = ) # Step 2: compute it eval(parse(text = mean.string)) Alberto Monteiro __ 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] How can I run a function to a piece of text?
An alternative could be: do.call(mean, as.list(parse(text = unlist(strsplit(script, , ) On Fri, Oct 16, 2009 at 3:39 PM, Javier PB j.perez-barbe...@macaulay.ac.uk wrote: Dear users, I got really stuck trying to apply a function to a piece of code that I created using different string functions. To make things really easy, this is a wee example: x-c(1:10) script-x, trim = 0, na.rm = FALSE ##script created by a number of paste() and rep() steps mean(script) ##function that I want to apply: doesn't work Is there any way to convert the script class so that the function mean() can read it as if it were text typed in the console? Thanks and have a superb day Javier -- View this message in context: http://www.nabble.com/How-can-I-run-a-function-to-a-piece-of-text--tp25930315p25930315.html Sent from the R help mailing list archive at Nabble.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. -- Henrique Dallazuanna Curitiba-Paraná-Brasil 25° 25' 40 S 49° 16' 22 O __ 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.