2016-10-06 6 views
0

동일한 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) 
} 

수 없습니다,하지만 난 도움이 될지 확실하지 않습니다.

+1

이유는 무엇일까요? 'fun3'은 스크립트 1에서'fun1'을 명시 적으로 호출합니다. 스크립트 1에서 다른 fun1을 호출하고 싶습니까? –

+1

'script 2 '의 함수는 어디에서 왔습니까? 아마 당신은 똑똑한'source 'ing을 할 수 있을까요? –

+0

@MauritsEvers 피하고 싶습니다. 누구도 스크립트에서 기능을 호출 할 수 없도록하고 싶지 않습니다. 그 스크립트 2가 fun1과 같은 일을하는 자체 fun4를 갖기를 바란다. – Sim101011

답변

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 

기본적으로, 매 가량이 스크립트는 거 자체 환경에서 실행할 수 있습니다 참조하십시오. 달성하려는 목표입니까?

1

각 스크립트의 끝에서 정의 된 기능 만 삭제하면됩니다.