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.