Pytanie Wywoływanie skryptu R z Pythona za pomocą rpy2


Jestem bardzo nowym użytkownikiem rpy2, a także R.

Zasadniczo mam skrypt R, script.R, który zawiera funkcje, takie jak rfunc (folder). Znajduje się w tym samym katalogu co mój skrypt python. Chcę wywołać go z Pythona, a następnie uruchomić jedną z jego funkcji. Nie potrzebuję żadnego wyjścia z tej funkcji R. Wiem, że to musi być bardzo podstawowe, ale nie mogę znaleźć przykładów kodów Pythona wywołujących skrypt R. Co obecnie robię, w Pythonie:

import rpy2.robjects as robjects

def pyFunction(folder):
    #do python stuff 
    r=robjects.r
    r[r.source("script.R")]
    r["rfunc(folder)"]
    #do python stuff

pyFunction(folder)

Otrzymuję błąd na linii ze źródłem:

r[r.source("script.R")] File "/usr/lib/python2.7/dist-packages/rpy2/robjects/__init__.py", line 226, in __getitem__ res = _globalenv.get(item) TypeError: argument 1 must be string, not ListVector

Nie rozumiem, w jaki sposób argument, który mu podaję, nie jest ciągiem, i myślę, że ten sam problem stanie się w następnej linii, z teczka będąc łańcuchem pytona, a nie sztuczką R.

Jak więc poprawnie zadzwonić do mojego skryptu?


14
2017-07-03 02:53


pochodzenie




Odpowiedzi:


source jest r funkcja, która uruchamia a r Plik źródłowy. Dlatego w rpy2mamy dwa sposoby, aby to nazwać:

r['source']("script.R")

lub

r.source("script.R")

r[r.source("script.R")] jest niewłaściwy sposób to zrobić.

Ten sam pomysł może dotyczyć następnego wiersza.


20
2017-07-03 03:17



Chcę uruchomić funkcję rfunc, zdefiniowaną w script.R, z argumentem teczka, który jest podany jako argument do mojej funkcji python. - Efferalgan
Dla następnej linii r.rfunc(folder) działa tak samo jak twoje rozwiązanie. Wygląda na to, że szukałem zbyt skomplikowanych rzeczy, a rozwiązanie było wyjątkowo proste. Dzięki. - Efferalgan
Tak, dokładnie. r["rfunc(folder)"] przejdzie folder jako ciąg 'folder', co prawdopodobnie nie jest tym, czego chcesz. Dziś zdobywam głosy do góry, zrobię to jutro. Twoje zdrowie! - CT Zhu


Rpy2 może pozwolić ci na zamianę skryptu R definiującego funkcje i inne obiekty na przestrzeń nazw Pythona:

http://rpy.sourceforge.net/rpy2/doc-2.4/html/robjects_rpackages.html#importing-arbitrary-r-code-as-a-package


3
2017-07-03 04:00