2013-06-25 4 views
2

서로 다른 함수 및 스크립트 목록을 작성하여 작업 디렉토리의 일부 하위 폴더에 넣어서 인수 (설명 통계, geostatistic, 회귀 ... 등)를 모두 나눌 수 있습니다.여러 작업 디렉토리가 R

source ("function_in_subfolder")를 입력하면 R은 기능이 없음을 알립니다. 함수가 작업 디렉토리에 있어야하기 때문에이 문제가 발생한다는 것을 이해했습니다. 작업 디렉토리의 하위 폴더를 함수의 소스로 설정할 수 있습니까 (계층 적으로 가정 해 봅시다)?

+1

물론,'source ("./ subdir/function_name.R")'. "." 현재 디렉토리에 대한 경로를 지정합니다. 나머지는 자체 설명이어야합니다. –

+1

함수 (R 스크립트 내'function' 키워드로 생성 된 객체)와 소스 파일 (R 스크립트 자체)을 혼동하지 마십시오. – krlmlr

답변

5

source function에는 chdir 인수가 있으며, TRUE으로 설정하면 작업 디렉토리가 스크립트가 상주하는 디렉토리로 설정됩니다. 새 작업 디렉토리는 스크립트 실행 기간 동안 유효하며 이후 변경됩니다. 다음과 같은 구조

main.R 
one/ 
    script.R 
    two/ 
    subscript.R 

Assumung 당신은 source("two/subscript.R", chdir=T) 전화, script.R에, main.R에서 source("one/script.R", chdir=T)를 호출 할 수 있습니다.

그러나 기본적으로 R은 현재 디렉토리에서 검색을 시작합니다. 분명히 someone attempted to create such a thing이지만, 예를 들어 PATH 환경 변수와 같은 "검색 경로 목록"과 같은 것은 없습니다. 필자는 "어디서나"스크립트 파일을 찾으려고하지 말 것을 강력히 권합니다. 대신 어떤 시점에서 어떤 스크립트가 실행되어야하는지 정확하게 표시하십시오. 그렇지 않으면 스크립트에 파일을 단순히 추가 한 결과 이름 충돌로 인해 예기치 않은 동작이 발생할 수 있으며 이는 디버그하기도 어렵습니다.

+0

좋아, 이해했다. 실제로 작업중인 서브 디렉토리에있는 함수를 호출하는 간단한 방법은 "." (source ("./ subdirectory/funtion_1.R)) – matteo

+0

@matteo :'. /'는 실제로 아무 것도 변경하지 않고 생략 할 수 있습니다. – krlmlr

+0

죄송합니다. 그래서 서투른,하지만 난 matlab에서 R로 혼자 전환 해요. matlab에 나는 주요 하나의 하위 폴더에 기능을 저장하는 데 사용되었습니다 그리고 나는 그들을 그냥 함수의 이름을 입력해야했다. – matteo

0

한 가지 해결책은 기능의 전체 경로를 얻으려면 list.files을 사용하는 것입니다. 예를 들면 :

myfunction.path <- list.files(getwd(), 
       recursive=TRUE,full.names=TRUE, 
       pattern='^myfunction.R$') 

그런 다음 당신은 그것을 호출 할 수

source(myfunction.path) 

list.files의 재귀 호출이 비쌀 수있다, 그래서 아마 당신은 당신의 시작 부분에 한 번 호출해야합니다 예를 들어 분석하고 모든 저장 명명 된 목록의 경로를 함수화합니다. 주의 깊게 2 개의 다른 하위 디렉토리에 동일한 이름의 소스 파일 2 개를 만들면 결과가 고유하지 않을 수 있습니다.