kgui
kgui

Reputation: 4163

Conditional selection DataTables Shiny not working

When a row in a DataTable is clicked, I would like an image in a different panel to be loaded but, I keep getting an error and not.

**Warning in widgetFunc() :
renderDataTable ignores ... arguments when expr yields a datatable  object; see ?renderDataTable
Error in basename(file) : a character vector argument expected**


output$image1 <- renderImage({
s = input$table1_rows_selected
if (length(s))   list(src=paste0(imagePath,"/peak",s,".png"))},deleteFile=FALSE)

The function below works however,

output$image1 <- renderImage({list(src=paste0(imagePath,"/peak1.png"))},deleteFile=FALSE)

Here is a full version of the code:

server.R 
writeLines("Please select ANY image")
imagePath = file.choose()

# break up the character vector, delete the last word
imagePath = dirname(imagePath)

server = function(input, output) {
output$table1 = renderDataTable({
# the peak table 
datatable(peaksTable,
          # when rowname is false each row does not have a numeric # associated with it 
          rownames = FALSE,
          # specify the name of the column headers
          colnames = c("Seqnames", "Start", "End","Width","Strand","P","Q","Effectsize",
                       "FDR","Keep","Gene_name","Gene.nearest","Count","Count.pred",
                       "Coverage","Local.mut.density","Base.context.GC","Tn.Context.TpC",
                       "Tn.context.CpG","Dnase","Activechrom","Hetchrom","Rept"))

},
escape = FALSE) 

# render an Image based on which rows are clicked on.   
output$image1 <- renderImage({
s = input$table1_rows_selected
if (length(s)) list(src=paste0(imagePath,"/peak",s,".png"))},deleteFile=FALSE)

ui.R

shinyUI(navbarPage(

title = " Nanoproject",

# first panel , create table of the peaksTable dataframe 
tabPanel('Peak Table' , 
       dataTableOutput('table1')),

# second panel
tabPanel('Peak Images' , 

       imageOutput("image1",width = "auto",height = "auto")
))

I'm not sure where I'm going wrong.

Upvotes: 0

Views: 602

Answers (1)

user5029763
user5029763

Reputation: 1935

Like it's been pointed out, without a reproducible example it's hard to help.

My guess is that your code is not dealing with the case where no rows are selected. If that's true, something like this should fix the problem:

server.R

output$image1 <- renderImage({ 
  s <- input$table1_rows_selected
  # print(s)
  if(is.null(s)) return(NULL)
  list(src = paste0(imagePath,"/peak",s,".png"))
}, deleteFile=FALSE)

Printing out s could help you understand better whats going on.

Upvotes: 1

Related Questions