2017-02-21 4 views
2

로컬 경로에서 의 데이터 표에 이미지를 표시하려고합니다. 로컬 경로는 www 폴더와 다르며 실제 시나리오에서는 지정된 경로에서 www 폴더로 이미지를 이동할 수 없습니다. 이상한 것은 그것이 www 위치에서 일하고 있지만 규정 된 경로에서 작동하지 않는다는 것입니다. 이 문제를 해결하기위한 도움말을 찾으십시오.R의 로컬 경로에서 데이터 테이블의 이미지 표시 반짝이

library(shiny) 
library(shinyBS) 
library(DT) 

flag <- data.frame(image=c('<img src="C:/Users/string/100x100/100x100_bigimg.jpg"></img>')) 

ui <- shinyUI(pageWithSidebar(
headerPanel("renderImage example"), 
sidebarPanel(
actionButton("go","Go") 
), 
mainPanel(
bsModal("modalExample", "Image", "go", size = "large",imageOutput("myImage")), 

DT::dataTableOutput("dt") 

) 
)) 

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

output$dt <- DT::renderDataTable({ 
DT::datatable(flag,escape = FALSE) 
}) 

observeEvent(input$go,{ 
output$myImage <- renderImage({ 
# Return a list containing the filename 
return(list(src = "C:/Users/string/100x100/100x100_bigimg.jpg", 
    contentType = 'image/png', 
    width = 550, 
    height = 400, 
    alt = "This is alternate text")) 
}, deleteFile = FALSE) 

}) 

}) 

shinyApp(ui,server) 

또한, 소정 경로 renderImage 부분에서 완벽하지만 데이터 테이블 부 화상 표시 작동되지지고 : 여기서

코드이다.

답변

0

addResourcePath - Shiny web Server와 마찬가지로 Windows에 적용 할 수 있습니다. 정적 리소스 디렉토리를 추가합니다.

ui.R

library(shiny) 
library(shinydashboard) 
library(shinyBS) 
library(DT) 

dashboardPage(
dashboardHeader(title = span(tagList(icon("image"), "Example"))), 
dashboardSidebar(), 
dashboardBody(

div(style="display:inline-block",uiOutput("infoButton")), 

DT::dataTableOutput("table2") 

) 
) 

Server.R

addResourcePath("Images","D/HDImages") # Images are located outside shiny App 

LeafNames <- c('Leaf1.jpg','Leaf2.jpg','Leaf3.jpg','Leaf4.jpg','Leaf5.jpg','Leaf6.jpg','Leaf7.jpg','Leaf8.jpg','Leaf9.jpg','Leaf10.jpg') 
LeafTable <- data.frame(LeafNames) 
LeafTable<- within(LeafTable, thumbnail <- paste0("<img 
src='","Images/",LeafTable$LeafNames,"' height='50'></img>")) 

function(input, output) { 

output$table2<-DT::renderDataTable({ 

responseDataFilter2 <- LeafTable[,c(2,1)] 

displayableData<-DT::datatable(data = as.data.frame(responseDataFilter2, stringAsFactors = FALSE, row.names = NULL), 

           escape=FALSE,selection="single",rownames=FALSE,colnames=c(" ","Name"), 

           callback = JS("table.on('dblclick.dt', 'td', function() { 
              var row=table.cell(this).index().row; 
              Shiny.onInputChange('rows_home',[row, Math.random()])}); 
              table.on('click.dt', 'td', function() { 
              var k=table.cell(this).index().row; 
              if(table.rows('.selected').indexes().toArray()!= '' && table.rows('.selected').indexes().toArray() == k){k=-1;} 
              Shiny.onInputChange('rows_up_home',[k, Math.random()]); 
              Shiny.onInputChange('row_path', table.rows(this).data().toArray()); 
              });"), 

           options = list(

           paging=FALSE,searching = FALSE,ordering=FALSE,scrollY = 750,scrollCollapse=TRUE,server = TRUE 

           )) 

}) 

output$infoButton = renderUI({ 
s = input$table2_rows_selected # Row number of selected row 
if (length(s)!= 0) { 
    tagList(
    actionButton("info", "",icon("info-circle"),style="color:rgb(57,156,8);border-color:rgb(255,255,255)"), 

    # Information Dialog Box 
    bsModal("ObjectInfo", LeafTable[s,c(1)], "info", size = "large", # Enables Pop up Screen 

      img(src= paste0("Images/",LeafTable[s,c(1)]),width='800',height='600') 

    ) 
) 

} 
}) 

} 
: 여기

https://shiny.rstudio.com/reference/shiny/latest/addResourcePath.html는 동작 예이며