R : Copyright 2001, The R Development Core Team Version 1.3.0 Under development (unstable) (2001-03-13) 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 more information. 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 > ## Revised March 7 2001 -pd > A <- function(x, y, ...) { + B <- function(a, b, ...) { match.call() } + B(x+y, ...) + } > (aa <- A(1,2,3)) B(a = x + y, b = 3) > all.equal(as.list(aa), + list(as.name("B"), a = expression(x+y)[[1]], b = 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, 2, 3)) [1] TRUE > > ## More dots issues: March 19 2001 -pd > ## Didn't work up to and including 1.2.2 > > f <- function(...) { + val <- match.call(expand.dots=F)$... + x <- val[[1]] + eval.parent(substitute(missing(x))) + } > g <- function(...) h(f(...)) > h <- function(...) list(...) > k <- function(...) g(...) > X <- k(a=) > all.equal(X, list(TRUE)) [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 > > tt <- function(x) { is.vector(x); deparse(substitute(x)) } > a <- list(b=3); tt(a$b) == "a$b" # tends to break when ... [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 > > all(NULL == NULL) [1] TRUE > > ## PR #656 (related) > u <- runif(1); length(find(".Random.seed")) == 1 [1] TRUE > > MyVaR <<- "val";length(find("MyVaR")) == 1 [1] TRUE > rm(MyVaR); length(find("MyVaR")) == 0 [1] TRUE >