R : Copyright 2000, The R Development Core Team Version 1.1.0 Under development (unstable) (May 10, 2000) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type "?license" or "?licence" for distribution details. R is a collaborative project with many contributors. Type "?contributors" for a list. Type "demo()" for some demos, "help()" for on-line help, or "help.start()" for a HTML browser interface to help. Type "q()" to quit R. > #### eval / parse / deparse / substitute etc > > ##- From: Peter Dalgaard BSA > ##- Subject: Re: source() / eval() bug ??? (PR#96) > ##- Date: 20 Jan 1999 14:56:24 +0100 > e1 <- parse(text='c(F=(f <- .3), "Tail area" = 2 * if(f < 1) 30 else 90)')[[1]] > e1 c(F = (f <- 0.3), "Tail area" = 2 * if (f < 1) 30 else 90) > str(eval(e1)) Named num [1:2] 0.3 60 - attr(*, "names")= chr [1:2] "F" "Tail area" > mode(e1) [1] "call" > > ( e2 <- quote(c(a=1,b=2)) ) c(a = 1, b = 2) > names(e2)[2] <- "a b c" > e2 c("a b c" = 1, b = 2) > parse(text=deparse(e2)) expression(c("a b c" = 1, b = 2)) > > ##- From: Peter Dalgaard BSA > ##- Date: 22 Jan 1999 11:47 > > ( e3 <- quote(c(F=1,"tail area"=pf(1,1,1))) ) c(F = 1, "tail area" = pf(1, 1, 1)) > eval(e3) F tail area 1.0 0.5 > names(e3) [1] "" "F" "tail area" > > names(e3)[2] <- "Variance ratio" > e3 c("Variance ratio" = 1, "tail area" = pf(1, 1, 1)) > eval(e3) Variance ratio tail area 1.0 0.5 > > > ##- From: Peter Dalgaard BSA > ##- Date: 2 Sep 1999 > > ## The first failed in 0.65.0 : > attach(list(x=1)) > evalq(dim(x) <- 1,pos.to.env(2)) > dput(get("x", env=pos.to.env(2))) structure(1, .Dim = 1) > > e <- local({x <- 1;environment()}) > evalq(dim(x) <- 1,e) > dput(get("x",env=e)) structure(1, .Dim = 1) > > ### Substitute, Eval, Parse, etc > > ## PR#3 : "..." matching > A <- function(x, y, ...) { + B <- function(a, b, ...) { match.call() } + B(x+y, ...) + } > (aa <- A(1,2,3)) B(a = x + y, "..1" = 3) > all.equal(as.list(aa), + list(as.name("B"), a = expression(x+y)[[1]], ..1 = 3)) [1] TRUE > (a2 <- A(1,2, named = 3)) #A(1,2, named = 3) B(a = x + y, named = 3) > all.equal(as.list(a2), + list(as.name("B"), a = expression(x+y)[[1]], named = 3)) [1] TRUE > > CC <- function(...) match.call() > DD <- function(...) CC(...) > a3 <- DD(1,2,3) > all.equal(as.list(a3), + list(as.name("CC"), ..1 = 1, ..2 = 2, ..3 = 3)) [1] TRUE > > > ## Bug PR#24 > f <- function(x,...) substitute(list(x,...)) > deparse(f(a, b)) == "list(a, b)" && + deparse(f(b, a)) == "list(b, a)" && + deparse(f(x, y)) == "list(x, y)" && + deparse(f(y, x)) == "list(y, x)" [1] TRUE > > ## Parser: > 1 < + 2 [1] TRUE > 2 <= + 3 [1] TRUE > 4 >= + 3 [1] TRUE > 3 > + 2 [1] TRUE > 2 == + 2 [1] TRUE > ## bug till ... > 1 != + 3 [1] TRUE >