2013-06-26 8 views
17

Jak uzyskać ścieżkę do katalogu nadrzędnego w R? Muszę napisać skrypt R, który pobiera dane wejściowe z katalogu w katalogu nadrzędnym i wysyła dane do innego katalogu w folderze nadrzędnym. Tak więc, gdybym mógł znaleźć ścieżkę do folderu nadrzędnego, mógłbym to zrobić.Katalog nadrzędny w R

Odpowiedz

17

Zakładam, że masz na myśli katalog nadrzędny katalogu roboczego R?

Najprostszym rozwiązaniem jest prawdopodobnie tak.

wd <- getwd() 
setwd("..") 
parent <- getwd() 
setwd(wd) 

Oszczędza to katalog roboczy, zmienia go do jego rodzica, dostaje wynik w parent i resetuje katalog roboczy ponownie. Oszczędza to konieczności radzenia sobie z kaprysami katalogów głównych, katalogów domowych i innych cech specyficznych dla systemu operacyjnego, co prawdopodobnie wymagałoby sporego manipulowania przy użyciu wyrażeń regularnych.

+2

+1 dla "..". Zawsze używam go w terminalu z cd, ale nigdy nie potrzebowałem do 'R', dobrze to zrobić. Dzięki – Michele

4

Prawdopodobnie te dwie wskazówki mogą pomóc

"~/" # after the forward slash you "are" in your home folder 

następnie na oknach

"C:/" # you are in your main hard drive 
"G:/" # you are just in another hard drive :-) 

UNIX można zrobić coś podobnego z

"/etc/" 

wtedy można zejść do każdej sub potrzebny katalog

Albo jak @Hong Ooi sugeruje, można przejść do katalogu nadrzędnego katalogu roboczym z

"../" 

NB: tuż po końcowym forward slash prasie tab i będziesz miał cały plik i folder, bardzo przydatny, zwłaszcza w RStudio

+0

@ user2449961 jeśli masz na myśli rodzica katalogu roboczego (powinieneś być bardziej precyzyjny) "../" ** jest ** ścieżką, której potrzebujesz. przepraszam, po prostu spróbuj. wpisz dosłownie '" ../ "' i po karcie '/' naciśnij, a zobaczysz cały plik w folderze nadrzędnym – Michele

+1

@ user2449961, jeśli usuniesz komentarz, inne nie będą miały sensu dla nowych widzów pytania – Michele

21

można użyć dirname na getwd wydobyć wszystko, ale się na najwyższym poziomie w bieżącym katalogu:

dirname(getwd()) 
[1] "C:/Documents and Settings" 
+0

To jest bardziej ogólne rozwiązanie niż zaakceptowana odpowiedź: – Nick

0

Innym possibil ity:

parts = unlist(strsplit(getwd(), .Platform$file.sep)) 
do.call(file.path, as.list(parts[1:length(parts) - 1])) 

ten dzieli filepath do katalogów, krople ostatni katalog, a następnie rekombinacji części do filePath ponownie.

9

Właściwie dirname pozwala wrócić do kilku folderów nadrzędnych

Path="FolderA/FolderB/FolderC/FolderD" 

dirname(Path) 

"FolderA/FolderB/FolderC"

dirname(dirname(Path)) 

"FolderA/FolderB"

I tak dalej. ..

+0

To jest dokładnie to, czego potrzebowałem do projektu, nad którym pracuję teraz, dzięki! –

Powiązane problemy