我在理解函数和环境时遇到了麻烦,因此我尝试编写一个简单的函数来简化问题。我写了以下代码:
h <- c(1:5)
meta <- function(){
resta <- function(){
v <- h-2
assign("h", v, envir = globalenv())
h
}
}
现在,当我调用resta()
时,它会从2
中提取h
,向我显示结果并更改其在全局环境中的值,但是如果我调用meta()
根本没有任何反应,h
不会改变其在全球环境中的价值。
我还尝试了resta
函数本身(不在另一个函数中),并且工作正常。
我想念什么吗? R无法运行这样的函数吗?是否有关于环境的任何解释?
答案 0 :(得分:0)
以下是使SELECT punishment_id, punishment.reason, cooldown.id, cooldown.time_left FROM player INNER JOIN punishment ON player.most_uuid=punishment.most_uuid INNER JOIN cooldown ON player.most_uuid=cooldown.most_uuid WHERE player.most_uuid=294153545139114775 GROUP BY punishment_id
函数正常工作的方法:
meta
您需要在h <- c(1:5)
meta <- function(){
resta <- function(){
v <- h-2
h <<- v
v
}
resta()
}
内调用resta()
,以使其作为返回值。
此外,您可以使用超级分配meta
代替assign("h", v, envir = globalenv())
,它会在<<-
的环境中分配h(如果存在),然后再在上述环境中进行搜索-在此涉及到全球环境 ie
Hadley Wickham :“ meta
从未在当前环境中创建变量,而是修改了在父环境中找到的现有变量。
如果<<-找不到现有变量,它将在全局环境中创建一个变量。”(第7章:环境,高级R )
检查<<-
和meta()
的值是否相同:
打一次电话:
h
第二次致电:
meta()
h
> meta()
[1] -1 0 1 2 3
> h
[1] -1 0 1 2 3
>
依此类推...