2013-02-19 15 views
6

Piszę funkcję, która używa pandoc w R za pomocą wiersza polecenia. Jak mogę użyć R do sprawdzenia, czy zainstalowany jest pandoc (zakładam również, że musiałby on znajdować się na ścieżce, która może być problemem dla użytkowników systemu Windows)?Sprawdź, czy program jest zainstalowany

+1

Testowanie obu rozwiązań na komputerach z systemem Windows, które miały pandoc i nie miały pandoc ... to wygląda na pracę. Nie wiem, które rozwiązanie jest bardziej niezawodne. – Dason

+3

Jedną z zalet, jakie widzę w podejściu 'system ('pandoc - v')' w stosunku do 'Sys.which' jest to, że sprawdza, czy program jest nie tylko zainstalowany, ale może zostać uruchomiony. –

+0

@BrianDiggs genialny !! – agstudy

Odpowiedz

3

Ta sugestia jest całkowicie oparta na moich osobistych doświadczeniach z tym pytaniem, które nie są w stanie odczytać tego, co znajduje się w moim pliku .bashrc w systemie Ubuntu. Zainstalowałem Pandoc przy użyciu metody opisanej jako here, ponieważ były funkcje, których potrzebowałem z nowszych wersji Pandoc, niż były dostępne w menedżerze pakietów Ubuntu. Uruchamianie R z terminala może wykryć Pandoc zgodnie z oczekiwaniami przy użyciu Sys.which, ale przy korzystaniu z RStudio, nie mógł tego zrobić. Nie mam pojęcia, czy jest to problem z użytkownikami systemu Windows, czy nie!

Alternatywą/obejście jest w tym przypadku rzeczywiście tworząc wektor typowych ścieżek, gdzie można oczekiwać wykonywalny Pandoc można znaleźć (pod domniemania, że ​​wielu użytkowników nie bardzo futz wokół z gdzie oni instalować programy) . Te informacje są ponownie dostępne na stronie instalacji, do której link został dołączony powyżej, oraz typowej ścieżce C:\\PROGRA~1\\... dla systemu Windows. Tak więc, może mieć coś jak następuje jako ścieżki do Pandoc:

myPaths <- c("pandoc", 
      "~/.cabal/bin/pandoc", 
      "~/Library/Haskell/bin/pandoc", 
      "C:\\PROGRA~1\\Pandoc\\bin\\pandoc") 
      # Maybe a .exe is required for that last one? 
      # Don't think so, but not a regular Windows user 

które można wykorzystać przy Sys.which() (na przykład Sys.which(myPaths)) oraz niektórych innych pomysłów już udostępnionych.

  • Jeśli pierwsza opcja jest wyjątkowo dopasowane, to nie ma problemu: można użyć systemu wzywa do Pandoc bezpośrednio.
  • Jeśli któraś z pozostałych opcji jest jednoznacznie dopasowana, możesz napisać swoje funkcje w taki sposób, że wkleisz pełną ścieżkę do pliku wykonywalnego w wywołaniu systemowym, zamiast tylko "pandoc".
  • Jeśli pierwsza opcja i jedna z pozostałych opcji są dopasowane, możesz po prostu wybrać pierwszą opcję i kontynuować.
  • Jeśli żadna nie jest dopasowana, zapytaj użytkownika o ścieżkę do instalacji Pandoc lub podaj komunikat, jak zainstalować Pandoc.
+0

To podejście działa i nie wymaga od użytkownika rekonfigurowania rzeczy. Pracowałem zarówno na Linuksie, jak i na Windowsie. Nie dałeś mi tego, o co cię poprosiłem, zorientowałem się, czego potrzebuję. –

+0

+1! za dzielenie się wrażeniami! – agstudy

+0

@agstudy, nie ma za co. Odpowiedzi zarówno twoja, jak i Dasona były pierwszą, która przyszła mi do głowy (podoba mi się podobne pytanie [tutaj] (http://stackoverflow.com/a/14376517/1270695)), ale kiedy wypróbowałem to wcześniej zamieszczając moją odpowiedź, to nie zadziałało, stąd moja potrzeba dalszego wykopania;) – A5C1D2H2I1M1N2O1R2T1

3

Przypuszczam, że można użyć wartości Sys.which i sprawdzić, czy wynik jest pusty.

pandoc.location <- Sys.which("pandoc") 
if(pandoc.location == ""){ 
    print("pandoc not available") 
}else{ 
    print("pandoc available") 
} 
+0

Działa to na moim Windowsie, ale 'Sys.which (" firefox ")' zwraca '" "', ale 'system (" open firefox ")' uruchamia przeglądarkę Firefox ... Zastanawiam się, dlaczego. –

+0

Byłbym też moją sugestią (ja też zasugerowałem to Tylerowi dla Ghostscript [tutaj] (http://stackoverflow.com/a/14376517/1270695)), ale z jakiegoś powodu nie działa z moim systemem. Może dlatego, że to była instalacja kabalowa? Ale nie jestem pewien ... – A5C1D2H2I1M1N2O1R2T1

+0

Dobra uwaga.Tak naprawdę nie testowałem tego w systemie Windows. Zastanawiam się, czy pandoc może być trochę inny, ponieważ jest to głównie narzędzie wiersza poleceń. – Dason

8

nie mam pandoc do zainstalowania, ale generalnie przetestować I jeśli program jest zainstalowany tak:

pandoc.installed <- system('pandoc -v')==0 

Na przykład aby sprawdzić, czy java jest zainstalowana:

java.installed <- system('java -version') ==0 

java version "1.7.0_10" 
Java(TM) SE Runtime Environment (build 1.7.0_10-b18) 
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode) 
> java.installed 
[1] TRUE 
+1

Twoje rozwiązanie było dokładnie tym, o co prosiłem, dziękuję. Ananda zorientował się, czego naprawdę potrzebowałem, kiedy nie wiedziałem, że tego potrzebuję. –

Powiązane problemy