如何解决如何在 Rmarkdown 中从 R reticulate 调用 Python 函数
我有这个 Rmarkdown,带有一个 python 函数:
---
title: "An hybrid experiment"
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
runtime: shiny
---
```{r setup,include=FALSE}
library(flexdashboard)
library(reticulate)
```
```{r}
selectInput("selector",label = "Selector",choices = list("1" = 1,"2" = 2,"3" = 3),selected = 1)
```
```{python}
def addTwo(number):
return number + 2
```
我尝试在响应式上下文中使用函数 addTwo
,所以我尝试了这个:
```{r}
renderText({
the_number <- py$addTwo(input$selector)
paste0("The text is: ",the_number)
})
```
但是我收到了这个错误:
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
Detailed traceback:
File "<string>",line 2,in addTwo
我一定是做错了什么,请您指导我解决这个问题吗?
解决方法
reticulate
部分没问题,错误实际上来自 shiny
。
以下是有关 input$selector
的一些重要细节:
- 应该用
selectInput
预先定义 - 需要用
as.numeric
将其转换为数字 - 如果选择尚未完成,
req(input$selector)
将避免renderText
中的错误
这有效:
---
title: "An hybrid experiment"
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
runtime: shiny
---
```{r setup,include=FALSE}
library(flexdashboard)
library(reticulate)
```
```{python}
def addTwo(number):
return number + 2
```
```{r}
selectInput("selector",label = "Selector",choices = list("choose 1" = 1,"choose 2" = 2,"choose 3" = 3),selected = 1)
renderText({
the_number <- py$addTwo(as.numeric(input$selector))
paste0("The text is: ",the_number)
})
```
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。