Использование частичного textInput в Shiny в качестве переменной в R - PullRequest
0 голосов
/ 23 июня 2019

Я хотел бы взять часть textInput в Shiny, чтобы создать переменную, которая, в свою очередь, будет соответствовать значениям в фрейме данных (DF) и создать textOutput на основе этого совпадающего значения.Скажем, у меня есть textInput с типичными входными данными, например, ABC 123, ABC 234, ABC 345, BCD 123, BCD 234, BCD 345. У меня также есть DF, который содержит один столбец (Col1) с «первой» частью типичного textInputт. е. ABC, BCD и другой столбец с набором соответствующих значений (Col2), например:

DF <-
   Col1 Col2
1  ABC    W
2  BCD    Y
3  CDE    X
4  DEF    Z

Я хотел бы взять textInput, скажем «ABC 123», выбрать только «первую» его часть («ABC»), затем используйте эту строку, чтобы найти соответствующее значение в DF $ Col2 и создать textOutput в Shiny, чтобы заполнить / вывести это значение, в данном случае значение «W».Точно так же, если пользовательский ввод в textInput (input $ UserInput) является CDE 345, я бы хотел, чтобы выводимое значение отображалось как «X».

Я могу создать «первый» текст раздела и вывести его в соответствующее пространство, но у меня возникли проблемы с дополнительной частью его использования, чтобы найти соответствующее значение в DF и вывести его вместо этого.

I 'используя это, чтобы изолировать «первую» часть ввода текста,

  output$first <- renderText({paste(substr(input$UserInput, 1, 
  nchar(input$UserInput)-4))})  

Это выводит строку «ABC», «CDE» и т. д., но у меня возникают проблемы с использованием этого для второго шага нахождения правильногозначение в DF $ Col2 и вывод его вместо этого.

1 Ответ

1 голос
/ 23 июня 2019

вы можете превратить ваш вызов substr в реактивную функцию.

mySelection <- reactive({
    inputString <- paste(substr(input$UserInput, 1, nchar(input$UserInput)-4))
    return(inputString)
})

теперь значение inputString будет меняться в зависимости от значения input$UserInput и может вызываться в любом месте вашего скрипта (как mySelection()).

output$first <- renderText({mySelection()})

затем вы можете извлечь нужное значение с помощью DF[which(DF$col1 == mySelection()),]$col2

...