在shinypass.io上的eval(parse(text =“f”))

时间:2015-12-05 17:34:50

标签: eval shiny

我想编写一个应用程序,让用户使用textInput输入一个函数,然后对该函数执行某些操作。这是一个玩具示例:

shinyUI(fluidPage(
   titlePanel("Test"),
  sidebarLayout(
     sidebarPanel(
        textInput("fun","function:",value="x")
    ),
  mainPanel(
      uiOutput("text")
  )
)

shinyServer(function(input, output) {
  findMax <- reactive({
       f <- function(x) eval(parse(text = input$fun), envir = list(x))
       x < seq(0,1,length=100)
       max(f(x)) 
   })  
   output$text <- renderText( {   
       findMax()
    })     

  })
))

这在本地计算机上运行时效果很好。但是当我将它提交给shinyapps.io时,我收到错误:找不到对象x。似乎eval的envir参数存在问题,但我无法找出它是什么。

一般来说,对eval(parse())构造有很多讨论,所以如果有人对如何做到这一点有建议(能够在框中输入表达式并将其转换为进入一个功能)不同,我也将不胜感激。

沃尔夫冈

1 个答案:

答案 0 :(得分:0)

在尝试了很多事情后,我终于让这个工作了:

而不是

f <- function(x) eval(parse(text = input$fun), envir = list(x))

使用

eval(parse(text = paste("f <- function(x)",input$fun,sep="")))

我不知道为什么两个都在我的电脑本地工作,但只有第二个在shinyapps.io上工作。此外,如果有人有不同的方法,我仍然会感兴趣。

沃尔夫冈