2017-10-11 4 views
0

Shinyアプリケーションでは、セキュリティ上の理由から一部の値が抑制されていて、特定の文字列で置き換えることができるdatatableここで私は"my_string"と呼ぶでしょう。この列を並べ替えるとき、これらの抑制された値は、のようにソートする必要があります。すべての実際の数値です。この列では、-1とコード化された抑制された値を除いて、すべての値が正の値になります。R Shiny DataTablesは数値を文字列とソートで置き換え、数値よりも小さい数値を返します

私は"my_string"として-1を再コーディング(characterに列を強制している)、正しく文字コード化された数値をソートするnatural plug-inを使用して試してみたが、それは数値の全てよりも大きいかのよう"my_string"がソートされています。これを処理する

別の可能な方法は、文字列で-1を置き換えるためにJavaScriptコールバックを使用することであるかもしれませんが、私はそのスクリプトを記述し、適切datatableに追加する方法がわかりません。

ここにnaturalプラグインを使用してみます。もし私が望むように動作していたならば、 "my_string"の行はトップの代わりにリストの一番下にあります。

# Example data, representing how the data comes to me 
my_mtcars <- mtcars[1:6, 1:4] 
my_mtcars[1, 4] <- -1 

# Here I am recoding the -1 
my_mtcars[my_mtcars == -1] <- 'my_string' 

# This is our demo app.R 
library(shiny) 
library(DT) 

ui <- fluidPage(
    dataTableOutput('example') 
) 

server <- function(input, output) { 
    output$example <- renderDataTable(
    my_mtcars, 
    server = FALSE, 
    plugins = 'natural', 
    options = list(columnDefs = list(list(type = 'natural', targets = '_all'))) 
) 
} 

shinyApp(ui = ui, server = server) 

enter image description here

答えて

1

これはおそらく、カスタムフォーマッタ/列機能をレンダリングすると簡単です。

DTのドキュメントで参照列レンダリング:https://rstudio.github.io/DT/options.html

とのDataTableのドキュメント:https://datatables.net/reference/option/columns.render

my_mtcars <- mtcars[1:6, 1:4] 
my_mtcars[1, 4] <- -1 

formatSuppressedValues <- JS(" 
    function(data, type) { 
    if (type !== 'display') return data; 
    if (data !== -1) return data; 
    return 'my_string'; 
    } 
") 

library(shiny) 
library(DT) 

ui <- fluidPage(
    DT::dataTableOutput('example') 
) 

server <- function(input, output) { 
    output$example <- DT::renderDataTable(
    my_mtcars, 
    server = FALSE, 
    options = list(
     columnDefs = list(list(
     targets = '_all', 
     render = formatSuppressedValues 
    )) 
    ) 
) 
} 

shinyApp(ui = ui, server = server) 
+0

パーフェクトは、あなたに感謝します!また、一般的なデータテーブルのドキュメントがどのようにR DT環境にマップされているかを見ることは非常に有用です。将来の訪問者のためのメモ - 'natural ='プラグインがそれを必要とするので、私の例では 'server = FALSE'を含めましたが、実際にはこの解決には必要ありません。 –

関連する問題