如何定义一个使用 R 代码但从 rTorch 调用的 Python 类?

问题描述

我正在使用 rTorch(例如 https://f0nzie.github.io/rtorch-minimal-book/)。我想从 rTorch 中定义一个 DataSet 类。我可以用 py_run_file 做到这一点。但是,我希望这个 DataSet Class 使用 R 代码,因为在 tidyR 中数据准备对我来说更容易。在 Python 中,我为此使用 rpy2,当从 Python 内部调用时,它工作正常。

但是,当我从 rTorchreticulate 嵌入执行此操作时,它不起作用(R studio 崩溃;在命令行上我收到“R 已初始化”),可能是因为 R- ->Python-->R 有点循环(参见 https://github.com/rstudio/reticulate/issues/56)。 [但我认为 rpy2 可以打开另一个 R 会话实例?]

这是我认为的最小示例:

准备数据的 R 代码(在 prepDataSet.R 中):

library(tidyverse)
prepDataSetFunc <- function(parameter) {
df <- tibble(name=parameter,x=1:10,y=10:1)
df
### Of course the real function does much more ...
}

文件“PyClasses.py”中的Python代码

import numpy as np
import pandas as pd
import torch
from torch.utils.data import Dataset,DataLoader
import rpy2.robjects as ro
from rpy2.robjects.packages import importr
from rpy2.robjects import pandas2ri
pandas2ri.activate()

ro.r('''source('prepDataSet.R')''')
prepFunc = ro.globalenv["prepDataSetFunc"]

class RDataSet(DataSet):
    def __init__(self,py_parameter):
        self.df = prepFunc(parameter=py_parameter)
    def __len__(self):
        return len(self.dfy.index)
        
    def __getitem__(self,i):
        return self.df.iloc[i:(i+1)].values.astype('float32')

完成所有 rTorch 工作的主要 R 代码

library(rTorch)
library(reticulate)
library(tidyverse)
library(magrittr)

reticulate::use_condaenv("mrTorchEnv") ## This was another problem,i.e. I Could not install rpy2 in rTorch environment,so I change the environment here

main <- py_run_file("PyClasses.py") ## This already fails

##### Then I want to do more stuff,i.e. DataLoader etc....

或者有什么方法可以从 rTorch 定义一个 PyTorch DataSet 类,然后使用 R 代码?或者通过字符串将R对象传递给Class???

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)