我是R&Shiny的新手,这将是我的第一个项目,在经历了一些很棒的教程后,我能够达到这一点。
我正在尝试在文本输出中显示所选行的值。该代码适用于选择,但我无法将所选行的值显示到 textOuput,因为它显示 [对象对象]。
这是我到目前为止得到的:
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)
一些调整:
- 用于访问所选行的语法略有偏差。从
data.table
文档中,输入是使用传递给dataTableOutput()
的 ID 进行访问;您编写input$addr_rows_selected
的位置,您实际上想要input$addressTable_rows_selected
,以便找到使用DT::dataTableOutput("addressTable")
呈现的表。 - 您正在将输出类型与渲染类型混合在一起。如果您希望将地址输出为文本(根据第
textOutput("selectedAddress")
行(,那么您应该使用renderText()
而不是DT::renderDataTable()
。 - 为了将地址呈现为文本,您必须获取地址(组件(并将其折叠为字符串,这可以通过
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)