2013-09-26 19 views
5

Sto creando una tabella utilizzando renderTable ma il codice HTML all'interno della tabella non viene eseguito il rendering:r tavolo lucido non rendering HTML

table not rendering

Questo è il codice snipit di interesse:

if (is.null(Compare_Count) || is.na(Compare_Count) || length(Compare_Count) == 0L) { 
      CT_Table[i, 3] <- HTML("<i class='icon-arrow-up'></i>") 
     } else if (CT_Table[i, 2] > Compare_Count) { 
      CT_Table[i, 3] <- print(tags$i(class='icon-arrow-up', style="text-color: green"), quote = FALSE) 
} 

HTML, paste o c funzionano.

Come visualizzare le frecce?

Grazie!


server.r: [Nota, questo è un esempio. Il codice non è completa, parentesi possono essere non corrispondenti, ecc Non è importante per la domanda.]

output$example <- renderTable(include.rownames=FALSE,{ 
CT_Table <- count(Canidates,vars=c("Name")) 
CT_Table <- CT_Table[order(CT_Table["Recent Reviews: "], decreasing=T),] 
    for (i in 1:nrow(CT_Table)) { 
     Compare_Name <- paste(CT_Table$Product[i]) 
     Compare_Count <- Can_trend[Can_trend$Name == Compare_Name, 2] 
     if (is.null(Compare_Count) || is.na(Compare_Count) || length(Compare_Count) == 0L) 
{ 
      CT_Table[i, 3] <- HTML("<i class='icon-arrow-up'></i>") 
     } else if (CT_Table[i, 2] > Compare_Count) { 
      CT_Table[i, 3] <- tags$i(class='icon-arrow-up', style="text-color: green") 
     } else if (CT_Table[i, 2] < Compare_Count) { 
      CT_Table[i, 3] <- tags$i(class='icon-arrow-down', style="text-color: red") 
     } else if (CT_Table[i, 2] == Compare_Count) { 
      CT_Table[i, 3] <- tags$i(class='icon-minus', style="text-color: yellow") 
     } 
    } 
    } 
CT_Table 
}) 

ui.r è solo una semplice chiamata al tableOutput o htmlOutput, ma nessuno dei due rende il codice HTML incollato nella colonna.

+0

Potresti fornire file "ui.R' e' server.R' minimi ma completi? – juba

+0

Ho aggiornato la domanda con un esempio di codice più completo; il file è lungo alcune migliaia di righe, quindi sto cercando di incollare solo ciò che è necessario. Per favore fatemi sapere se ho lasciato qualcosa fuori, e grazie! – JayCo

risposta

7

Questo problema è stato risolto con sanitize.text.function = function(x) x;

ha bisogno di essere inclusi in questo modo:

output$example <- renderTable({ 
    table <- someTable_Data_here 
    table 
}, sanitize.text.function = function(x) x) 

Questo è il senso here


anche, una nota,

ho notato che è possibile chiamare xtable all'interno del renderTable, e renderà correttamente la tabella.

MA si dovrebbe notare che le opzioni si passa a xtable non hanno alcun effetto! Invece è necessario passare queste opzioni alla funzione 'renderTable'.

quindi se si desidera chiamare questo:

output$example <- renderTable({ 
    table <- someTable_Data_here 
    xtable(table, align=c("llr")) 
}, sanitize.text.function = function(x) x) 

ciò che devi fare è:

output$example <- renderTable({ 
    table <- someTable_Data_here 
    table 
},align=c("llr"), sanitize.text.function = function(x) x) 

Il team RStudio ed i ragazzi RShiny sono impressionanti. Sono sicuro che una tonnellata della documentazione è ancora in fase di scrittura, e spero che questo aiuti qualcuno nel frattempo.

+0

Esiste un equivalente di 'sanitize.text.function' per' renderDataTable'? Grazie! – harkmug

+0

Sembra improbabile, dato che 'sanitize.text.function' è dal pacchetto' xtable' che scrive da solo l'html - 'renderTable' sta semplicemente passando i parametri ad esso. È probabilmente possibile incorporare html in modo che 'renderDataTable' lo visualizzi correttamente ... ma sembra una nuova domanda! – JayCo

+0

Non è necessario utilizzare alcun tipo di sensibilizzazione del testo per 'renderDataTable': esegue automaticamente il rendering di html. Dovresti notare che l'attuale implementazione (1 novembre 2014) ordinerà il tuo html stilizzato in ordine alfabetico senza sfuggire all'html! Ho inviato una segnalazione di bug per questo. – JayCo