Выберите и отобразите значение строки в Shiny Datatable - PullRequest
0 голосов
/ 22 апреля 2019

Я совершенно новичок в R & Shiny, это будет мой первый проект, который я смог получить к этому моменту, пройдя несколько удивительных уроков.

Я пытаюсь получить значение выбранной строки в textOutput. Код работает с выделением, но я не могу отобразить значение выбранной строки в textOuput, так как он показывает [Object Object].

Это то, что я получил до сих пор:

library(shiny)
library(data.table)
addr <- as.data.table(read.csv("addresses.csv", header = T, stringsAsFactors = F))
names(addr) [1:4]<- c("STREET ADDRESS","CITY NAME","PROVINCE","POSTAL CODE")

ui <- fluidPage(
  br(),
  fluidRow(
    column(12, div(DT::dataTableOutput("addressTable"), style="font-family:verdana", align="left"))
  ),
  fluidRow(
    column(4, div(textOutput("selectedAddress"), align="center"))
  )
)

server <- function(input, output) {
  output$addressTable <- DT::renderDataTable({addr}, server = T, selection = 'single')

  output$selectedAddress <- DT::renderDataTable({
    selectedrowindex <<-input$addr_rows_selected
    selectedrowindex <<-as.numeric(selectedrowindex)
    selectedrow <- (addr[selectedrowindex,])
    selectedrow
  })
}

shinyApp(ui, server)

1 Ответ

1 голос
/ 23 апреля 2019

Несколько настроек:

  1. Ваш синтаксис для доступа к выбранным строкам был слегка отключен. Из документации data.table ввод является доступом с идентификатором, переданным в dataTableOutput(); где вы написали input$addr_rows_selected вы на самом деле хотите input$addressTable_rows_selected, чтобы найти таблицу, отображаемую с DT::dataTableOutput("addressTable").
  2. Вы смешиваете типы вывода с типами визуализации. Если вы хотите, чтобы адрес выводился в виде текста (для строки textOutput("selectedAddress")), вам следует использовать renderText() вместо DT::renderDataTable().
  3. Чтобы преобразовать адрес в текст, вы должны взять адрес (компоненты) и свернуть его до строки символов, что можно сделать с помощью paste(...,collapse = ",")
library(shiny)
library(data.table)
addr <- as.data.table(read.csv("addresses.csv", header = T, stringsAsFactors = F))
names(addr) [1:4]<- c("STREET ADDRESS","CITY NAME","PROVINCE","POSTAL CODE")

ui <- fluidPage(
  br(),
  fluidRow(
    column(12, div(DT::dataTableOutput("addressTable"), style="font-family:verdana", align="left"))
  ),
  fluidRow(
    column(4, div(textOutput("selectedAddress"), align="center"))
  )
)

server <- function(input, output) {
  output$addressTable <- DT::renderDataTable({addr}, server = T, selection = 'single')

  output$selectedAddress <- renderText({
    selectedrowindex <- input$addressTable_rows_selected
    selectedrowindex <- as.numeric(selectedrowindex)
    selectedrow <- paste(addr[selectedrowindex,],collapse = ", ")
    selectedrow
  })
}

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