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.