[R] How can I run a function to a piece of text?

2009-10-16 Thread Javier PB

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?

2009-10-16 Thread Sundar Dorai-Raj
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?

2009-10-16 Thread Alberto Monteiro
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?

2009-10-16 Thread Henrique Dallazuanna
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.