Peter Dalgaard skrev: > Rune Schjellerup Philosof wrote: > >> Hi >> >> I want to use a function (update) that in its body uses >> eval(call, parent.frame()) >> >> I would like to use this function in a function that does not contain >> the variables referred to in 'call'. Those variables are instead in the >> parent.frame() of my function (named 'second' below) >> >> Like this: >> a <- 2 >> >> evalu <- function(obj) { >> call <- obj$call >> eval(call, parent.frame()) >> } >> first <- function() { >> a <- 3 >> obj <- list(call=expression(a)) >> second(obj) >> } >> second <- function(obj) { >> eval(evalu(obj), parent.frame()) >> } >> >> first() #returns 2, but I want 3. >> >> >> How do I change 'second' such that the value of 'a' from 'first' is >> returned? >> >> > > You could use the "n" argument to parent.frame (or eval.parent) inside > "evalu" and go two generations back instead of one. Somewhat neater, you > could pass the desired environment directly to evalu, as in > > e <- parent.frame() > evalu(obj, e) > > (I'm not sure it is actually needed to separate out the calculation of > "e", but I tend to be paranoid about evaluating parent.frame() in > function arguments.) > > >
Thanks for the answer, but it isn't what I need. 'evalu' is a replacement for a function that I cannot change (update.default). My question is: How do I accomplish this by only changing 'second'? -- Med venlig hilsen Rune Schjellerup Philosof Ph.d.-studerende, Statistik, IST, SDU Telefon: 6550 3607 E-mail: rphilo...@health.sdu.dk Adresse: J.B. Winsløwsvej 9, 5000 Odense C ______________________________________________ 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.