On 12 Aug 2008, at 17:00, Gabor Grothendieck wrote:

Executing strings is probably not a very
R-ish thing to do

I know - but as far as I can see there was no other way around in this case...

but if that's your aim use eval and parse:

s <- "iris["iris$Sepal.Width > 4,]"
eval(parse(text = s))

Works like a charm - thanks a lot for your quick response!

cheers,
Dries


On Tue, Aug 12, 2008 at 10:35 AM, Dries Knapen <[EMAIL PROTECTED]> wrote:
Hi,

Thanks for your reply. However, this didn't work exactly as I needed it to
since the expression is dynamically built as a character vector

i.e. not executed as
e <- expression(Sepal.Width > 4)

but as
e <- expression("Sepal.Width > 4")

in which case subset() throws an error (must evaluate to logical).

Fortunately, a good night of sleep resulted in this workaround:

s <- "iris[Sepal.Width > 4,]"
execute.string <- function(string) {
 write(string, 'tmp.txt')
 out <- source('tmp.txt')
 unlink('tmp.txt')
 return(out$value)
}
execute.string(s)


On 12 Aug 2008, at 04:08, Gabor Grothendieck wrote:

Try this:

e <- expression(Sepal.Width > 4)
subset(iris, eval(e), select = "Sepal.Length")

  Sepal.Length
16          5.7
33          5.2
34          5.5

subset(iris, eval(e))

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
16          5.7         4.4          1.5         0.4  setosa
33          5.2         4.1          1.5         0.1  setosa
34          5.5         4.2          1.4         0.2  setosa


On Mon, Aug 11, 2008 at 9:36 PM, Dries Knapen <[EMAIL PROTECTED]>
wrote:

Hi,

Based on user input, I wrote a function that creates a list which looks
like:

str(list)

List of 4
 $ varieties: chr [1:12] "temp.26_time.5dagen_biorep.1"
"time.5dagen_temp.26_biorep.2" "temp.18_time.5dagen_biorep.1"
"temp.18_time.5dagen_biorep.2" ...
 $ temp     : Factor w/ 2 levels "18","26": 2 2 1 1 2 2 1 1 1 1 ...
$ time : Factor w/ 3 levels "14dagen","28dagen",..: 3 3 3 3 1 1 1 1
2 2
...
 $ biorep   : Factor w/ 2 levels "1","2": 1 2 1 2 1 2 1 2 1 2 ...

Now, based on user input as well, I want to dynamically extract data from list$varieties. Therefore, I wrote a function which generates a string
containing the data extraction conditions which looks like this:

query <- make.contrast.substring(negative.contrast, list)

Read 1 item
[1]

"(list$temp=='18')&(list$time=='14dagen'|list$time=='28dagen'| list$time=='5dagen')&(list$biorep=='1'|list$biorep=='2')"

Now what I want to achieve is to extract data by doing:

list$varieties[query]

which doesn't work since "query" is a string and object names are not
expanded...

Obviously, manually copying the string like so


list$varieties[(list$temp=='18')&(list$time=='14dagen'|list $time=='28dagen'|list$time=='5dagen')&(list$biorep=='1'|list $biorep=='2')]

works perfectly - but I need it to be automated.

I'm quite new to R and used to programming in PHP, so I may just be
"conceptually" confused about how to do this. Any help would be greatly
appreciated.

thanks in advance,
Dries Knapen



********************************************
Dr. Dries Knapen

University of Antwerp
Department of Biology
Ecophysiology, Biochemistry and Toxicology
Groenenborgerlaan 171 - U711, B-2020 Antwerp
Belgium

tel ++32 3 265 33 49
fax ++32 3 265 34 97

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

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

Reply via email to