2017-12-20 16 views
1

이 패키지 (darksky, 여기에있는 내용 : https://github.com/hrbrmstr/darksky)가 어떻게 작동하는지 이해하려고합니다.패키지 내의 함수가 동일한 하위 함수를 공유합니까?

  1. aaa.R
  2. get-current-forecast.R

전자 (aaa.R)을 하위 기능이 convert_time라는 포함

IT는 R 폴더에이 두 개의 스크립트가 포함되어 있습니다. 이것은 후자 (get-current-forecast.R)에 의해 호출되고 작동하는 것처럼 보이지만 은 get-current-forecast.R에 가져 오거나/reffer되어 있지 않습니다.

어떻게 작동합니까? 모든 하위 기능을 동일한 패키지의 다른 기능에서 사용할 수 있습니까?

+2

대화 형 세션에서 R 파일을 소싱하는 것과 패키지가 작동하지 않습니다. 패키지의 모든 .R 파일에 정의 된 모든 함수는 패키지의 네임 스페이스에 등록되며'namespace '라이브러리는'library (foo)'를 실행할 때 첨부됩니다. 따라서 패키지의 함수가 다른 함수를 호출 할 때 R은 해당 패키지의 네임 스페이스에서 해당 이름의 함수를 찾습니다. – joran

+0

고마워, 나는 그걸 몰랐다. 따라서 기본적으로 패키지가로드 될 때마다 모든 하위 함수를 사용할 수 있습니다. 함수 내에서 하위 함수를 정의 할 때 좀 더 조심해야합니다. – Gautam

+2

다른 함수 내에서 정의 된 함수는 다릅니다. R은 패키지 네임 스페이스에있는 것을보고 등록하지 않습니다. 그들은 enclosing 함수 내에서만 사용할 수 있습니다. – joran

답변

2

대화식 세션에서 R 파일을 소싱하는 것과 패키지가 작동하지 않습니다. 패키지의 모든 .R 파일에 정의 된 모든 함수는 패키지의 네임 스페이스에 등록되며 library(foo)을 실행하면 첨부됩니다. 따라서 패키지의 함수가 다른 함수를 호출 할 때 R은 해당 패키지의 네임 스페이스에서 해당 이름의 함수를 찾습니다.

그러나 다른 함수 내부에서 정의 된 함수는 다릅니다. R은 패키지 네임 스페이스에있는 것을보고 등록하지 않습니다. 그들은 enclosing 함수 내에서만 사용할 수 있습니다. foo이 패키지에 일부 .R 파일에 정의 된

foo <- function(x){ 
    y <- x+1 
    bar <- function(z){ 
    z+1 
    } 

    bar(y) 
} 

예를 들어

, 함수 foo 볼 것이지만, barfoo에서 볼 수있다.