让用户使用textInput指定新的变量名称和定义

时间:2017-06-18 07:44:40

标签: r shiny textinput

我希望我的用户创建一个新变量并将其添加到现有数据框中。用户需要通过textInput输入名称和定义。注意:我已尝试在Getting strings recognized as variable names in 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))

ui.R:

fluidPage(
            sidebarLayout(
                sidebarPanel(
                  textInput("NewVar_Name", "New attribute's name"), 
                  textInput("NewVar_Def", "New attribute's definition", 
                            "ifelse(rawdata$price_tiers_new == 'Value', 1, 0)"),

                    br(),
                    actionButton("addButton", strong("Done!")),
                    width = 3
                ),

                mainPanel(
                    verticalLayout(
                        br()
                        #Will display a summary of new variable
                    )
                )
           )
        )

server.R:

function(input, output, session) {

    temp   <- reactiveValues()

    observe(
        if(input$addButton == 0) {
            temp$df <- rawdata
        } else {
            temp$df <- mydata()
        }
    )


    mydata <- eventReactive(input$addButton, {
        if(input$addButton == 0) {
            rawdata
        } else {
             tempname <- eval(as.name(input$NewVar_Name))
             do.call("<-",list(tempname, eval(parse(text=input$NewVar_Def))))

             cbind(temp$df, tempname)
        }
    })

}

1 个答案:

答案 0 :(得分:0)

我想你可以做到

columns conversion

请注意,mydata <- eventReactive(input$addButton, { if(input$addButton == 0) { rawdata } else { tempdata <- eval(parse(text=input$NewVar_Def)) temp$df <- setNames(cbind( temp$df, tempdata), c(names(temp$df), input$NewVar_Name)) } }) 不起作用,因为数据集没有名为ifelse(rawdata$price_tiers_new == 'Value', 1, 0)的列。