gpt4 book ai didi

r - 在函数中,是否可以将 `return( eval ( expr ) )`

转载 作者:行者123 更新时间:2023-12-02 08:33:27 26 4
gpt4 key购买 nike

我正在尝试使用以下代码在函数内执行类似全局赋值的操作(例如 ... <<- ...)

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

不分配 16test在环境中test_function叫做。

不过

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

eval(test_function())

确实如此!

有没有办法只做前者而不求助于后者?

最佳答案

嗯,我会小心的。如果你只是

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

该值也不会出现在全局环境中,这实际上就是您在第一个函数中所做的事情。注意

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

返回 16,所以赋值在函数范围内发生,正如预期的那样并被返回。没有理由认为会有任何不同。如果您想在父范围内进行评估,请明确说明

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

或者如果您想始终在全局环境中操作,请指定

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

但实际上这似乎是一个糟糕的设计决定。函数具有这样的全局副作用是不礼貌的。确保这对您的应用程序来说是绝对必要的,并且您别无选择。

关于r - 在函数中,是否可以将 `return( eval ( expr ) )`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24379020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com