Arhn - архитектура программирования

R Shiny Как выбрать столбец фрейма данных формы ввода (реактивный)

Я хочу выбрать Input из столбца реактивного фрейма данных в виде кода ниже, но он ничего не показывает:

library(shiny)
library(data.table)

ui <- fluidPage(
selectInput('region','Select region',choice=tableOutput('region'),selected=NULL)
)

server <- function(input, output, session){

data<- reactive(fread('murders.csv')) # this file contain 'region' column

output$region <- renderTable(data()$region)
}
shinyApp(ui = ui, server = server)

Но когда я читаю данные вне функции сервера (не реактивно), selectinput работает нормально:

library(shiny)
library(data.table)

ui <- fluidPage(
selectInput('region','Select region',choice=data$region,selected=NULL)
)

data<- fread('murders.csv') # this file contain 'region' column

server <- function(input, output, session){

}
shinyApp(ui = ui, server = server)

Я думаю, что лучше читать файл в реактивном режиме в функции сервера, не могли бы вы показать мне, как выбрать ввод из столбца данных в реактивном режиме?

19.11.2020

Ответы:


1

Если вы не планируете изменять csv-файл убийства, нет необходимости в его реактивности, и это может быть глобальное значение. Если вы хотите, чтобы он не был глобальным, вы можете преобразовать пользовательский интерфейс в функцию и загрузить данные внутри.

Версия 1

library(shiny)
library(data.table)

ui <- function(request){
  data <- fread("murders.csv")
  fluidPage(
  selectInput('region','Select region',choice=data$region,selected=NULL)
)
}

server <- function(input, output, session){
}
shinyApp(ui = ui, server = server)

Если вы действительно хотите по какой-то причине загрузить его на сервер, вам нужен updateSelectInput. Версию ниже

Версия 2

library(shiny)
library(data.table)

ui <- fluidPage(
    selectInput('region','Select region',choices=NULL, selected=NULL)
  )

server <- function(input, output, session){
  data <- fread("murders.csv")
  updateSelectInput(session, "region", choices=data$region)
}
shinyApp(ui = ui, server = server)

И, как я уже сказал, нет необходимости в том, чтобы он был реактивным, но если вы действительно хотите, чтобы он был реактивным, вам нужно получить доступ к реактивному внутри reactiveEnvironment, в этом случае наблюдениеEvent кажется наиболее подходящим:

Версия 3

library(shiny)
library(data.table)

ui <- fluidPage(
  selectInput('region','Select region',choices=NULL, selected=NULL)
)

server <- function(input, output, session){
  data <- reactive(fread("murders.csv"))
  observeEvent(data(),updateSelectInput(session, "region", choices=data()$region))
}
shinyApp(ui = ui, server = server)
19.11.2020
  • Хороший совет; Я хочу еще раз предостеречь от чтения данных в части ui, потому что это не то место, где кто-то может ожидать, что данные будут прочитаны частично, и, следовательно, затрудняет понимание кода. 19.11.2020
  • @ luismf: Большое спасибо за ваш пост. Все 3 версии успешно работают. Вы спасаете мой проект !!! [Разверните мой вопрос]: если я хочу прочитать файл из ui textInput, например: fread (input $ file_path), я вижу, что выполняется только версия 3. Версии 1 и 2 не могут читать ввод $ file_path из пользовательского интерфейса с помощью fread. Не могли бы вы поделиться своим мнением? 19.11.2020
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..