Я сделал блестящее приложение, которое позволяет пользователю вводить формулу , используя textInput()
- , создавать новую переменную и давать summary()
новой переменной.(возможно, больше опций, например, plots / new variable, но в целях упрощения мы придерживаемся здесь summary()
)
Мой пример ниже демонстрирует новую переменную, созданную var1 / var2.Однако мой код не является оптимальным по следующим причинам:
- Использование
eval(parse(text=input$formula))
может привести к проблемам с безопасностью. - Кроме того, когда пользователь делает более сложную переменную, скажем (var1 + var2 ^ 2) / var3.Не было бы автоматического завершения / текстового предложения для второй и третьей переменных, что раздражает, если имена переменных длинные / сложные (первую переменную можно найти с помощью пакета
shinysky
(см. Пример здесь ))
Кто-нибудь может подсказать, как решить эти две проблемы?
Используя в качестве примера набор данных mtcar
, мой код выглядит так:
mtcars %>% head()
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
library(shiny)
shinyApp(
ui = fluidPage(
textInput("formula","Type formula",value = "disp/hp"),
textOutput("value")
),
server = function(input, output) {
#attach the dataset so that user can aviod typing dataset$var
attach(mtcars)
#output variable manipulation with a summary
output$value <- renderText({ summary(eval(parse(text=input$formula))) })
}
)