簡體   English   中英

需要一個關於如何在 r-package 中包裝 python 代碼的最小示例

[英]Need a minimal example on how to wrap python code in r-package

來自數據科學,我可以按照 hadleys 的書編寫自己的(特定於項目的)R 庫,但很難掌握更高級的軟件開發術語。 我想合並以前數據科學家提供的 python 函數,而無需在 R 中重寫它們。因此,我正在尋找將 python 函數包裝到 R 包中的最小示例。

構建 r 包時附加 python 腳本中, python 腳本在 R 函數的主體內使用,大概是為了解決 r 函數中的特定任務。 如果 python 腳本包含一組我希望在加載myRpackage后可用的函數myRpackage

例如:給定腳本math.py

def square(x):
    return x * x 

def cube(x):
    return x * x * x

創建一個包mathR

library(MathR)
square(2)
# 4
cube(2)
# 8

如何將 python 腳本中的函數作為 r 包中的獨立函數公開?

編輯:這是我的第一種方法。 pymath.R

math <- function(){
out <- reticulate::py_run_file(system.file("python/math.py", package = "mathR"))
return(out)
}

但是,這需要我初始化math()以公開函數,而我希望在加載包后直接使用它們,如上所示。

library(mathR)
math_functions <- math()
math_functions$square(2)
# 4

您可以使用attach 或者,您可以將它們定義為調用網狀包裝函數的 R 函數。

但順便說一句,我自己不想這樣編碼,因為這些本身不是 R 函數,如果出現問題,將很難跟蹤和調試。

您可以向您的包添加 onLoad 調用以實現此目的。 只需讓包源加載這些功能,然后它就會像你提到的那樣工作

.onLoad <- function(libname, pkgname){
  x <- rnorm(10)   ## dummy example 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM