Основной вопрос: скажем, я писал функции R, которые называли python через rPython
, и я хочу интегрировать это в пакет. Это просто --- неважно, что функция R обтекает Python, и вы продолжаете, как обычно. напримерКак вы импортируете библиотеку Python в R-пакете с помощью rPython?
# trivial example
# library(rPython)
add <- function(x, y) {
python.assign("x", x)
python.assign("y", y)
python.exec("result = x+y")
result <- python.get("result")
return(result)
}
Но что, если питон код с функциями R требуют пользователей импортировать библиотеки Python первыми? например
# python code, not R
import numpy as np
print(np.sin(np.deg2rad(90)))
# R function that call Python via rPython
# *this function will not run without first executing `import numpy as np`
print_sin <- function(degree){
python.assign("degree", degree)
python.exec('result = np.sin(np.deg2rad(degree))')
result <- python.get('result')
return(result)
}
Если запустить это без импорта библиотеки numpy
, вы получите сообщение об ошибке.
Как вы импортируете библиотеку Python в пакет R? Как вы прокомментируете это с помощью roxygen2
?
Оказывается стандарт R это:
# R function that call Python via rPython
# *this function will not run without first executing `import numpy as np`
print_sin <- function(degree){
python.assign("degree", degree)
python.exec('import numpy as np')
python.exec('result = np.sin(np.deg2rad(degree))')
result <- python.get('result')
return(result)
}
Каждый раз, когда вы запускаете функцию R, вы будете импортировать целую библиотеку Python.
Я смущен этой целым рядом вопросов. Я буквально никогда не использовал rPython, но просто просматривая документацию, я не совсем понимаю, почему вы просто не просто вызываете 'python.exec (« import numpy as np »)' внутри самой функции в первую очередь? – joran
Это не смешно. «Импортировать всю библиотеку python» дважды не проблема. Большинство кодов python могут иметь 'import sys' в сотне мест. «Импорт» для каждой функции является хорошим примером «явный лучше, чем неявный». Или у вас есть R '.First' в вашем пакете, который импортирует все ваши библиотеки python, но тогда вы должны держать это в курсе, но это, вероятно, ложная оптимизация. – Spacedman
@Spacedman Ну, если вы настаиваете. Python поддерживает внутренний список всех импортированных модулей. «Большинство кодов python могут импортировать sys в сотню мест». Но они этого не делают. Так же, как библиотеки R не загружаются с помощью R-функций, странно загружать библиотеки python в функции. Я бы подумал, что это также поразит вашу работу. Вторая идея, вероятно, лучше, чтобы использовать '.First' – ShanZhengYang