有什么方法可以使用网状结构在 r 中调用 base python 函数吗?
Is there any way to call base python function in r using reticulate?
我从 python 函数中得到了一个“生成器对象”。但是,我尝试了很多方法,但未能使用 reticulate
读取 r 中的“generator object”。我知道 python 基函数 list()
可以将“生成器对象”转换为“json”,这然后我可以在 r 中阅读。我想知道如何在 r 中使用 base python 函数? (我不想使用 py_run_file
)
例如:
>library(reticulate)
>foo <- import("foo")
>res <- foo.func()
<generator object at 0x7fd4fe98ee40>
谢谢!
我不确定你是否可以直接在 R 中,但你肯定可以在 R Markdown 中。我使用 R Markdown 在两者之间来回翻转对象。
我使用基本的 html_document
YAML 输出。然而,我通常不会编织这种类型的 RMD,所以我认为如果你以相同的方式使用它,那么放在那里并不重要。
当你使用reticulate
你需要一个环境。
所以首先我要一个 R 块:
```{r setup}
library(tidyverse) # for random r object creation to use in Python
library(reticulate)
use_virtualenv("KerasEnv") # this is an environment I already have setup
# creating R objects to use with Python
str(diamonds)
cut <- diamonds$cut %>% unique()
```
然后我将创建我的 Python 块。
```{r usingPy,results="asis",engine="python"}
import numpy as np
import random
diamonds_py = r.diamonds # bring dataset into Python
mxX = max(diamonds_py.x) # create a new Python object to bring into R
print(mxX)
# 10.74
cut_py = r.cut # bring vector into Python
```
现在假设我想把 Python 的东西带回 R。
```{r tellMeMore}
# bring Python object into R
mxX_r = py $ mxX
# [1] 10.74
```
您可以 运行 Python 和 R 代码逐行、逐块或编织。要清除 Python 环境,我很确定您必须重新启动 RStudio。
您可以使用 iterate
或 iter_next
。
例如,考虑一个 python 生成器 firstn.py
:
def firstn(n):
num = 0
while num < n:
yield num
num += 1
你可以 traverse the generator 或者 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
我从 python 函数中得到了一个“生成器对象”。但是,我尝试了很多方法,但未能使用 reticulate
读取 r 中的“generator object”。我知道 python 基函数 list()
可以将“生成器对象”转换为“json”,这然后我可以在 r 中阅读。我想知道如何在 r 中使用 base python 函数? (我不想使用 py_run_file
)
例如:
>library(reticulate)
>foo <- import("foo")
>res <- foo.func()
<generator object at 0x7fd4fe98ee40>
谢谢!
我不确定你是否可以直接在 R 中,但你肯定可以在 R Markdown 中。我使用 R Markdown 在两者之间来回翻转对象。
我使用基本的 html_document
YAML 输出。然而,我通常不会编织这种类型的 RMD,所以我认为如果你以相同的方式使用它,那么放在那里并不重要。
当你使用reticulate
你需要一个环境。
所以首先我要一个 R 块:
```{r setup}
library(tidyverse) # for random r object creation to use in Python
library(reticulate)
use_virtualenv("KerasEnv") # this is an environment I already have setup
# creating R objects to use with Python
str(diamonds)
cut <- diamonds$cut %>% unique()
```
然后我将创建我的 Python 块。
```{r usingPy,results="asis",engine="python"}
import numpy as np
import random
diamonds_py = r.diamonds # bring dataset into Python
mxX = max(diamonds_py.x) # create a new Python object to bring into R
print(mxX)
# 10.74
cut_py = r.cut # bring vector into Python
```
现在假设我想把 Python 的东西带回 R。
```{r tellMeMore}
# bring Python object into R
mxX_r = py $ mxX
# [1] 10.74
```
您可以 运行 Python 和 R 代码逐行、逐块或编织。要清除 Python 环境,我很确定您必须重新启动 RStudio。
您可以使用 iterate
或 iter_next
。
例如,考虑一个 python 生成器 firstn.py
:
def firstn(n):
num = 0
while num < n:
yield num
num += 1
你可以 traverse the generator 或者 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