我从python函数中得到了一个“生成器对象”。但是,我尝试了许多方法,但未能使用reticulate读取r中的“生成器对象”。我知道python函数list()可以将“生成器对象”转换为"json",然后我可以在r中读到。(我不喜欢使用py_run_file)
例如:
>library(reticulate)
>foo <- import("foo")
>res <- foo.func()
<generator object at 0x7fd4fe98ee40>发布于 2022-02-09 20:16:20
您可以使用iterate或iter_next。
作为一个例子,考虑一下python生成器firstn.py。
def firstn(n):
num = 0
while num < n:
yield num
num += 1您可以在穿越发电机中使用iterate:
library(reticulate)
source_python('firstn.py')
gen <- firstn(10)
gen
#<generator object firstn at 0x0000020CE536AF10>
result <- iterate(gen)
result
# [1] 0 1 2 3 4 5 6 7 8 9或使用iter_next
iter_next(gen)
[1] 0
iter_next(gen)
[1] 1
iter_next(gen)
[1] 2发布于 2022-02-09 20:08:57
我不确定你是否可以直接在R中,但你肯定可以在R,Markdown。我使用在两者之间来回翻转对象。
我使用基本的html_document YAML输出。然而,我通常不会编织这种类型的RMD,所以我认为如果您以同样的方式使用它,那么您放在那里的内容并不重要。
当使用reticulate时,您需要一个环境。
所以首先我要一个R块:
```{r setup}用于Python中随机创建r对象的库(Tidyverse)#
图书馆(网状)
use_virtualenv("KerasEnv") #这是我已经设置的环境
创建与Python一起使用的R对象
str(钻石)
切割<-钻石$裁剪%>%唯一()
然后我将创建我的Python块。
```{r usingPy,results="asis",engine="python"}将numpy导入为np
随机导入
diamonds_py = r.diamonds #将数据集引入Python
mxX = max(diamonds_py.x) #创建一个新的Python对象以引入R
打印(MxX)
10.74
cut_py = r.cut #将向量引入Python
现在假设我想把Python的东西带回R。
```{r tellMeMore}将Python对象引入R中
mxX_r = py $ mxX
1 10.74
您可以逐行、分块或编织运行Python和R代码。要清除Python环境,我确信您必须重新启动RStudio。
https://stackoverflow.com/questions/71055838
复制相似问题