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

Posted

技术标签:

【中文标题】让用户使用 textInput 指定新的变量名称和定义【英文标题】:Have users specify new variable name and definition using textInput 【发布时间】:2017-11-20 14:53:57 【问题描述】:

我希望我的用户创建一个新变量并将其添加到现有数据框中。用户需要通过 textInput 输入名称和定义。注意:我已经尝试了Getting strings recognized as variable names in R中发布的所有建议

不过,我无法让它工作。任何建议将不胜感激。谢谢!

这是我的代码:

原始数据:

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
                    )
                )
           )
        )

服务器.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)
        
    )


【问题讨论】:

这应该适合你:***.com/questions/44598544/… 这非常适合添加新变量(谢谢!)。然而,在那个例子中,我们没有从用户那里得到变量名。 【参考方案1】:

我猜你可以做到

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) 将不起作用,因为数据集没有名为price_tiers_new 的列。

【讨论】:

你是对的。 Price_tiers_new 在我的其他数据集中可用,因此在这种情况下不起作用。但是您的建议非常有效。谢谢!

以上是关于让用户使用 textInput 指定新的变量名称和定义的主要内容,如果未能解决你的问题,请参考以下文章

使用 pygame_textinput 模块获取用户输入值?

r Shiny 使 textInput 以先前的 selectInput 为条件

R:根据列表元素名称创建新的数据框变量

来自 Textinput 的 Flash as3 比较

如何让 onPress 在 TextInput 内的 React Native Text 元素上触发?

SDL TextInput(使用新的 1.3 结构)