Saturday, 15 September 2012

r - In a function, is it possible to `return( eval ( expr ) )` -



r - In a function, is it possible to `return( eval ( expr ) )` -

i trying global assignment within function (e.g. ... <<- ...), using next code

test_function = function(){ return(eval(parse(text = "test <- 4^2"))) } test_function()

which doesn't assign 16 test in environment test_function called.

however

test_function = function(){ return(expression(test <- 4^2)) } eval(test_function())

does!

is there anyway of doing former without resorting latter?

well, careful. if did just

test_function = function(){ test <- 4^2 }

that value not in global environment either, , that's you're doing in first function. note that

test_function = function(){ return(eval(parse(text = "test <- 4^2"))) } print(test_function()) # [1] 16

returns 16 assignment happening in function scope expected , beingness returned. there's no reason think have differently. if want evaluate in parent scope, explicit it

test_function = function(){ return(eval(parse(text = "test <- 4^2"), parent.frame())) } test_function()

or if want operate in global environment, specify that

test_function = function(){ return(eval(parse(text = "test <- 4^2"), globalenv()) } test_function()

but seems poor design decision. it's not polite functions have global side effects that. create sure absolutely necessary application , have no other options.

r

No comments:

Post a Comment