防止功能相互呼叫

时间:2016-10-06 11:50:19

标签: r scope environment-variables environment

我有两个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)
}

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

我知道我可以在脚本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)
}

我知道创建新环境,但我不确定这会有所帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用?environment来实现此目的。另请参阅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

基本上,每一个skript都将在自己的环境中运行。 这是你想要实现的目标吗?

答案 1 :(得分:1)

在每个脚本的末尾只删除其中定义的函数。