2013-02-22 2 views
4

나는 폴더 목록이 있습니다. 각 폴더에는 파일에 대해 폴더로 실행해야하는 R 동일한 스크립트가 있습니다. 스크립트를 한 번 쓴 다음 각 폴더에 스크립트를 복사했습니다. 문제는 내가 약 100 개의 폴더 목록을 가지고있어서 현재 작업 디렉토리에서 수동으로 setwd() 할 수 없다는 것입니다. 현재 작업 디렉토리를 설정하는 것이 가능한지 알고 싶습니다. 예를 들어 "."setwd() 현재 작업 디렉토리에

setwd("/User/myname/./") 

또는 폴더 이름을 입력 할 때마다 현재 작업 디렉토리에 R을 알리는 또 다른 쉬운 방법입니다.

+1

왜 각 폴더에 동일한 스크립트를 복사했으며 작업 디렉토리를 설정해야합니까? 달성하고자하는 것은 무엇입니까? – Roland

+1

하나의 스크립트 만 가지고 각 폴더의 내용을 수행하는 것이 어떨까요? 루프를 통해 말해봐? –

+0

안녕하세요 롤랜드와 세바스찬! 그것은 매우 큰 매트릭스 (2.8G 주위)부터 시작하여 하위 폴더와 각 폴더에서 동일한 스크립트를 실행하기 때문에 파일에 대해 동일한 작업을 수행해야하기 때문입니다. – Fuv8

답변

5

어때? source 기능이 일시적으로 소스 파일에있는 하나에 작업 디렉토리를 변경하는 chdir 인수를 가지고 다른 큰 응답에 추가

# set the working directory to the main folder containing all the directories 
setwd("/user/yourdir/") 

# pull all files and folders (including subfolders) into a character vector 
# keep ONLY the files that END with ".R" or ".r" 
r.scripts <- list.files(pattern=".*\\.[rR]$" , recursive = TRUE) 

# look at the contents.. now you've got just the R scripts.. 
# i think that's what you want? 
r.scripts 

# and you can loop through and source() each one 
for (i in r.scripts) source(i) 
+1

'list.files'에 대한'pattern' 인자에 관심이 있습니다. – Roland

+0

@Roland nice. 고맙습니다 –

+1

OP가 폴더를 순환하여 작업 디렉토리를 설정하려는 경우 모두 한 레벨 깊이라면'list.dirs (recursive = FALSE) '를 고려할 수 있습니다. –

3

내가 이해하는 한, 스크립트가 여러 폴더에 분산되어있는 R 스크립트의 배치를 트리거하려고합니다. 디렉토리가 포함 된 모든 디렉토리의 위치입니다 $ 곳에

개인적으로, 나는 아마 쉘 스크립트 (또는 OS의 equivilent) 오히려 R.

for dir in /directoriesLocation/*/ 
do 
    cat $dir/scriptName.R | R --slave --args $arg1 $arg2 
done 

을 그 일을보다,이 작업을 수행하는을 작성합니다 R 스크립트 scriptName.R

+0

안녕하세요. 예, 클러스터에서 작업 중이므로 .bash 스크립트를 호출하여 .R 스크립트를 모두 실행하는 .sh 스크립트를 실행합니다. – Fuv8

3

.

하나의 옵션은 벡터를 생성하는 것입니다 list.files 및/또는 다른 도구를 사용하여 각 스크립트 파일의 파일 이름 (경로 포함)을 지정하십시오. 그런 다음 source 각각의 파일을 사용하고 sourcechdir으로 설정하면 작업 디렉토리를 설정합니다.

관련 문제