嗨同仁Shiny用户,允许用户将新变量添加到Shiny App中的数据集
我希望我的用户能够将新变量添加到主数据框中。用户将使用textInput键入定义。然后我们将使用server.R将其添加到数据框中。这是我的代码。我无法使其工作。任何帮助将不胜感激。谢谢!
RAWDATA:
colA <- c('1','2','3','3','2')
colB <- c('1','1','3','3','2')
colC <- c('14','12','33','33','26')
colD <- c('Value','Mainstream','Value','Premium','Premium')
colE <- c(1,2,3,4,5)
rawdata <- as.data.frame(cbind(colA,colB, colC, colD, colE))
View(rawdata)
ui.R:
fluidPage(
sidebarLayout(
sidebarPanel(
textInput("addVar", "New attribute definition"),
helpText("Note: Type the attribute definition using R code."),
helpText("For example:"),
helpText("data$Value <- ifelse (data$price_tiers_new == 'Value', 1, 0)"),
br(),
actionButton("addButton", strong("Add!")),
width = 3
),
mainPanel(
verticalLayout(
br()
#Will display histogram of the newly added variables
)
)
)
)
server.R:
function(input, output, session) {
curr <- reactiveValues()
curr$df <- rawdata
observeEvent(input$addButton, {
eval(parse(text=input$filter))
})
}
例如,这里有两个新的变量定义尝试。如果我们添加第一个定义,rawdata将会有一个额外的列(Value)。如果我们添加第二个定义,rawdata将会有两个额外的列(Value和Premium)。
curr$df$Value <- ifelse(curr$df$colD == 'Value', 1, 0)
curr$df$Premium <- ifelse(curr$df$colD == 'Premium', 1, 0)
不是'eval(parse(text =))'有风险,它的范围是全局的吗?恶作剧或错误可能会影响当前文件夹中的所有文件。例如,您可以在文本框中添加文本“mt3 << - mtcars”,并在退出程序后让mt3等待您。如果可以创建,它可以删除或更改。请参阅SO/SE – skoh
的“eval(parse())”的风险,我不能跟随,哪些文件是你的意思?另外我会推荐使用'<< - '闪亮内。但是如果你有更好的解决方案,你应该添加它! – BigDataScientist
1.('which files')在闪存应用程序执行的命令行中可用的文件;例如(谢谢@ flodel),如果用户在新建变量的textInput中放入'rm(list = ls())',它会删除所有文件。 2.我并没有劝阻使用'<< - '闪亮。 3.拥有更好的解决方案并不是指出解决方案已确定的风险的先决条件(Stack Exchange Guidelines)。 *更好 – skoh