2012-09-14 4 views
0

이름에 숫자가 다른 여러 기능을 제공하려고합니다.소스가 함수 이름을 약어로 사용하는 것을 어떻게 중지합니까?

예 : func1, func2.

"func_1"및 "func_2"를 사용하고 번호를 먼저 넣으려고했지만 "1func"및 "2func". 아무리 함수 이름을 인덱스해도 소스 함수는 단지 하나의 함수 ("func")를 읽습니다. 이는 내가 원하는 것이 아닙니다.

나는 sapply 및-루프를 사용하여 시도했다 :

에 대한 루프 :

func.list <- list.files(path="/some_path",pattern="some pattern",full.names=TRUE) 
for(i in 1:length(func.list)){ 
source(func.list[i]) 
} 

sapply : 나는 여러 버전을 작성 될 것입니다

sapply(func.list,FUN=source) 

데이터 수정 기능을 사용하고 있으며, 색인을 생성 할 수 있기를 정말로 원합니다. 왜냐하면 간결하고, 그러나 특정 이름은 어려울 것이며, 필자는 자신의 디렉토리에서 함수 파일만을 선택적으로 소스하는 것을 허용하지 않습니다. 내 코드에서

이 func.list 출력을 제공합니다 (I 때문에 개인의 실제 디렉토리/계약 문제를 교체 한) : 다음

[1] "mypath/1resp.correction.R" 
[2] "mypath/2resp.correction.R" 

을 때 소스 func.list와 중 하나에 대한 루프 또는 위에서 언급 한 sapply 코드에서 R은 "2resp.correction.R"의 코드 본문과 함께 resp.correction이라는 함수 하나만로드합니다.

+4

이 표준 소스 행동 같은 소리하지 않습니다, 당신의 example.reproducible을 확인하시기 바랍니다. –

+0

확실히 1 *을 넣을 수 없습니다.'1func'-와 같이 R (또는 대부분의 언어)에 유효한 식별자가 아닙니다. –

+0

@ David Robinson : 귀하의 의견을 보내 주셔서 감사합니다. 좀 더 명확히하기 위해 "func1", "func_1"및 "1func"형식을 사용하여 (성공하지 않고) 시도했습니다. – dayne

답변

3

source의 인수는 함수 이름이 아니라 파일 이름입니다. 따라서 여기에 공상을 선사 할 수 없습니다. 정확한 파일 이름을 제공해야합니다.

두 파일 모두 두 파일에 동일한 이름 (resp.correction)의 함수 정의가 들어있는 것처럼 들리므로 네가 한 파일을 다른 파일로 가져 오면 전역 환경에서이 함수를 덮어 씁니다.

당신은 당신의 루프 내에서, 다른 이름으로 기능을 다시 할당 할 수 있습니다 :

func.list <- list.files(path="/some_path",pattern="some pattern",full.names=TRUE) 
for(i in 1:length(func.list)) { 
    source(func.list[i], local = TRUE) 
    assign(paste0("resp.correction", i), resp.correction, envir = .GlobalEnv) 
} 
+0

정말 고마워요! 이제 파일에서 함수 이름을 변경하지 않았 음을 알았습니다. 거대한 바보 같은 기분이지만 다시 한번 감사드립니다. – dayne

관련 문제