热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在Rmarkdown中从R网状调用Python函数

我有这个Rmarkdown,带有一个python函数:---title:Anhybridexperimentoutput:

我有这个 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 "", 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)
})
```






推荐阅读
author-avatar
mobiledu2502895693
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有