我不能在R中的其他函数中使用函数吗?

时间:2019-11-10 22:11:09

标签: r

我在理解函数和环境时遇到了麻烦,因此我尝试编写一个简单的函数来简化问题。我写了以下代码:

h <- c(1:5)
meta <- function(){
  resta <- function(){
    v <- h-2
    assign("h", v, envir = globalenv())
    h
  }
} 

现在,当我调用resta()时,它会从2中提取h,向我显示结果并更改其在全局环境中的值,但是如果我调用meta()根本没有任何反应,h不会改变其在全球环境中的价值。

我还尝试了resta函数本身(不在另一个函数中),并且工作正常。

我想念什么吗? R无法运行这样的函数吗?是否有关于环境的任何解释?

1 个答案:

答案 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
> 

依此类推...