如何从 R reticulate 调用 Python 方法

Ran*_*lva 5 python r reticulate

reticulate允许您从 R 与 Python 交互。在 Python 中,通常使用(类)方法与变量交互。使用 reticulate 时如何访问/执行 R 中一个 Python 变量的方法?例如,如果我创建以下 Python 字典:

```{python}
fruits = {
    "apple": 53,
    "banana": None,
    "melon": 7,
}
```
Run Code Online (Sandbox Code Playgroud)

可以使用网状访问,

```{r}
py$fruits
```

## $apple
## [1] 53
## 
## $banana
## NULL
## 
## $melon
## [1] 7
Run Code Online (Sandbox Code Playgroud)

如何调用字典类(例如keys()R)中的方法之一?

```{python}
print(fruits.keys())
```

## dict_keys(['apple', 'banana', 'melon'])
Run Code Online (Sandbox Code Playgroud)

我试过:

```{r error=TRUE}
py$fruits$keys()
```

## Error in eval(expr, envir, enclos): attempt to apply non-function

```{r error=TRUE}
py$fruits.keys()
```

## Error in py_get_attr_impl(x, name, silent): AttributeError: module '__main__' has no attribute 'fruits.keys'
Run Code Online (Sandbox Code Playgroud)

但两次尝试都失败了。

Art*_*lov 5

正如类型转换中所指出的,Python 的 dict 对象在 R 中变成命名列表。因此,要访问 R 中“字典键”的等效项,您可以使用names

```{r}
names(py$fruits)
```
## [1] "melon"  "apple"  "banana"
Run Code Online (Sandbox Code Playgroud)

dict您可以选择使用将结果转换回类似对象reticulate::dict()。然后生成的对象将按照您想要的方式运行:

```{r}
reticulate::dict( py$fruits )
```
## {'melon': 7, 'apple': 53, 'banana': None}

```{r}
reticulate::dict( py$fruits )$keys()
```
## ['melon', 'apple', 'banana']
Run Code Online (Sandbox Code Playgroud)