python - 如何从 R reticulate 调用 Python 方法

标签 python r reticulate

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

```{python}
fruits = {
    "apple": 53,
    "banana": None,
    "melon": 7,
}
```

可以使用网状结构访问,

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

## $apple
## [1] 53
## 
## $banana
## NULL
## 
## $melon
## [1] 7

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

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

## dict_keys(['apple', 'banana', 'melon'])

我试过:

```{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'

但是两次尝试都失败了。

最佳答案

正如 Type Conversions 中指出的那样, Python 的 dict 对象变成了 R 中的命名列表。因此,要访问 R 中等效的“字典键”,您可以使用 names:

```{r}
names(py$fruits)
```
## [1] "melon"  "apple"  "banana"

您可以选择使用 reticulate::dict() 将结果转换回类似 dict 的对象。生成的对象将按照您的意愿运行:

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

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

关于python - 如何从 R reticulate 调用 Python 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51108722/

相关文章:

python - 如何在 Python 中对 dict 中的列表进行排序?

python - 与 sqlite3 数据库上的表单提交中的 sqlalchemy 行更新行为不一致

r - 按另一个数据框的列排序数据框

r-markdown - Rmarkdown - Rmarkdown 中的 python 内联代码

python - 使用python的re.sub正则表达式替换字符串

python - 变量赋值存储在内存中的什么位置?

r - 在函数中使用 dplyr,对函数参数进行分组错误

r - 用日期的最大值在 dplyr 中汇总 - R

python - pyomo + reticulate error 6 句柄无效

python - 如何使用 reticulate 将 python 的字符串代码转换为 R