r - R+shiny:从非反应函数中读取输入变量
问题描述
我有以下代码:
library(shiny)
foo <- function(a, b){
a*b*input$ni
}
ui <- fluidPage(
numericInput("ni", label = "in", value = 3),
verbatimTextOutput("out")
)
server <- function(input, output, session) {
output$out <- renderText(foo(a = 2, b = 4))
}
shinyApp(ui = ui, server = server)
运行它会导致错误object 'input' not found
。该foo
函数不知道闪亮的输入,因为它是在闪亮的函数之外编写的,它不是一个反应函数。
我怎样才能让它工作?由于我的代码是如何构建的(在这个 MWE 之外),我需要该函数foo
只接受参数a
,而不接受b
其他参数。也就是说,输入不能作为参数传递给它。它还需要位于服务器功能之外。
有没有办法让它以某种方式从闪亮的环境中获取输入变量?
解决方案
如果您无法更改函数参数,则可以使用全局赋值运算符 ( <<-
),以便该变量在函数范围之外可用。
library(shiny)
foo <- function(a, b){
a*b*ni
}
ui <- fluidPage(
numericInput("ni", label = "in", value = 3),
verbatimTextOutput("out")
)
server <- function(input, output, session) {
output$out <- renderText({
ni <<- input$ni
foo(a = 2, b = 4)
})
}
shinyApp(ui = ui, server = server)
推荐阅读
- vba - 运行时错误 1004 - 该命令不能用于多项选择
- ios - iOS模拟器中是否有相机设备模拟?
- angular - 获取错误 @types/tapable/index"' 不是构造函数类型
- angular - 默认情况下,Angular 2 检查单选按钮
- ssis - 转换的两个输入必须至少包含一个已排序的列,并且这些列必须具有匹配的元数据 ssis
- stata - 如何跨列减去
- java - 关于未应用 spring batch tasklet 的执行方法以外的方法的 AOP 建议
- javascript - 如何从数组中查找最大数量,但仅在javascript中从选定元素中查找
- apache-kafka - 使用 avro 模式中的 java.util.List 从 Kafka 读取消息
- javascript - Reactjs如何在渲染块之前使用if ... else