我正在编写闪亮的应用程序,我想从用户输入创建数学函数 - 有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。这个解决方案不起作用,我没有其他想法。
答案 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)
会给你这个: