Используйте блестящий ввод в качестве имени столбца, если null используйте строку - PullRequest
0 голосов
/ 05 мая 2020

Мне, должно быть, здесь не хватает чего-то небольшого, но я хочу использовать input$test в качестве имени столбца и по умолчанию использовать строку «NEW_COLUMN», если пользователь этого не добавит. Я хотел сделать это, используя rlang инфикс %||%, где «NEW_COLUMN» используется, когда нет input$test, но это, похоже, не работает

library(shiny)
library(rlang)

ui <- fluidPage(
    sidebarLayout(
        sidebarPanel(
            textInput("test", "Mutated Column Name")
        ),
        mainPanel(
           tableOutput("table")
        )
    )
)

server <- function(input, output) {

   colname <- reactive({ 
    # this logic needs to be cleaned up
    input$test %||% sym("NEW_COLUMN")
    })

   output$table <- renderTable({
       iris %>%
        mutate(!!colname() := "test")
   })

}

shinyApp(ui = ui, server = server)

Почему не эта работа? Разве input$test на самом деле не NULL до того, как пользователь вводит значение для textInput?

1 Ответ

1 голос
/ 05 мая 2020

Длина строки пустого ввода равна 0.

Мы можем создать наш собственный инфикс:

`%empty%` <- function (x, y) 
    {
        if (str_length(x) == 0) y else x
}

Затем использовать:

colname <- reactive({ 
   sym(as.character(input$test)) %empty% sym("NEW_COLUMN")
})

В приложении !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...