[R] Deparse substitute assign with list elements
soeren.vogel at posteo.ch
soeren.vogel at posteo.ch
Fri May 15 10:50:18 CEST 2015
Thanks, Bill, I should have googled more carefully:
http://stackoverflow.com/questions/9561053/assign-values-to-a-list-element-in-r
So, remove
assign(nm, tmp, parent.frame())
and add
txt <- paste( nm, '<-', tmp, sep='' )
eval( parse(text=txt), parent.frame() )
in `foo()` will do the trick.
Bests
Sören
> On 15.05.2015, at 00:02, William Dunlap <wdunlap at tibco.com> wrote:
>
> You could use a 'replacement function' named 'bar<-', whose last argument
> is called 'value', and use bar(variable) <- newValue where you currently
> use foo(variable, newValue).
>
> bar <- function(x) {
> x + 3
> }
> `bar<-` <- function(x, value) {
> bar(value)
> }
>
> a <- NA
> bar(a) <- 4
> a
> # [1] 7
> b <- list(NA, NA)
> bar(b[[1]]) <- 4
> b
> #[[1]]
> #[1] 7
> #
> #[[2]]
> #[1] NA
>
>
> Bill Dunlap
> TIBCO Software
> wdunlap tibco.com
>
> On Thu, May 14, 2015 at 11:28 AM, <soeren.vogel at posteo.ch> wrote:
> Hello,
>
> When I use function `foo` with list elements (example 2), it defines a new object named `b[[1]]`, which is not what I want. How can I change the function code to show the desired behaviour for all data structures passed to the function? Or is there a more appropriate way to sort of "pass by references" in a function?
>
> Thanks
> Sören
>
> <src>
> bar <- function(x) {
> return( x + 3 )
> }
>
> foo <- function(x, value) {
> nm <- deparse(substitute(x))
> tmp <- bar( value )
> assign(nm, tmp, parent.frame())
> }
>
> # 1)
> a <- NA
> foo(a, 4)
> a # 7, fine :-)
>
> # 2)
> b <- list(NA, NA)
> foo(b[[1]], 4) # the first list item should be 7
> b # wanted 7 but still list with two NAs :-(
> </src>
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>
More information about the R-help
mailing list