闪亮 - 从用户字符串输入创建反应函数

时间:2015-02-28 23:07:24

标签: r shiny

我正在编写闪亮的应用程序,我想从用户输入创建数学函数 - 有textInput用户写一个函数,例如x ^ 2,sin(x)+5等。然后,我想绘制这个函数所以我必须从textInput和'function(x)'语句连接字符串以获取R函数。据我所知,我需要有一个包含R函数的反应变量。我提出了这个问题:

func<-reactive(
     bquote(function(x){ .(parse(text = input$fun)[[1]])}), quoted = TRUE
)

其中input $ fun是textInput的id。这个解决方案不起作用,我没有其他想法。

1 个答案:

答案 0 :(得分:1)

您可以使用f<-function(x) {eval(parse(text=input$func))}input转换为函数。

Fron @JoeCheng:

虽然这确实有效,但如果应用程序只在本地运行,我会提醒任何阅读本文的人只在用户输入上使用eval()执行此操作的应用程序在服务器上部署是不安全的,因为用户可以提供他们想要的任何代码,例如系统(&#34; rm -rf~&#34;)

例如,在一个闪亮的应用程序中:

<强> app.R

library(shiny)

        ui <- shinyUI(fluidPage(
                mainPanel(textInput("func", "Function:", ""),
                          submitButton("Plot!"),
                          plotOutput("plot")
                          )
        ))
        server <- function(input, output, session) {
                output$plot<-renderPlot({
                        f<-function(x) {eval(parse(text=input$func))}
                        x<-1:10
                        plot(x,f(x))
                }                        
                )              
        }

shinyApp(ui = ui, server = server)

会给你这个: enter image description here