防止函数相互调用

Preventing functions to call each other

我有这两个 R 脚本,它们将来自同一个 R 实例。

脚本 1:

fun1 <- function(x, y)
{
  ret = x+y+mean(x,y)
  return(ret)
}

fun2 <- function(x, y, z)
{
  k = fun1(x, y)
  print(x+y+k)
}

我希望脚本 2 是这样的

fun3 <- function(k, l)
{
  k = fun4(k, l)
  m = k / sd(k,l)
  return(m)
}

fun4 <- function(k, l)
{
  ret = k+l+mean(k,l)
  return(ret)
}

但是人们写的是

fun3 <- function(k, l)
{
  k = fun1(k, l)
  m = k / sd(k,l)
  return(m)
}

但我不想让脚本 2 调用脚本 1 中的函数。我该怎么做?

我知道我可以在脚本 1 中执行此操作,但是有很多函数,例如 fun2,其中一些函数很大,所以这对我来说是不可能的

fun2 <- function(x, y, z)
{
  fun1 <- function(x, y)
  {
  ret = x+y+mean(x,y)
  return(ret)
  }
k = fun1(x, y)
print(x+y+k)
}

我知道创建新环境,但不确定是否有帮助。

您可以为此使用 ?environments。另见 another similar question

env1 <- new.env()
env2 <- new.env()

assign("myfun", value = function(x) {
  mean(x)
}, envir = env1)

assign("myfun", value = function(x) {
  mean(x^2)
}, envir = env2)

myx <- 1:10

with(env1, myfun(myx)) # 5.5
with(env2, myfun(myx)) # 38.5

基本上,每个脚本都会 运行 在其自己的环境中。 这是你想要达到的目标吗?

在每个脚本的最后删除其中定义的函数。