私はShinyを初めて使用し、非常にシンプルな光沢のあるアプリを作成しました。
library(shiny)
ui <- fluidPage(
fluidRow(column(7,dataTableOutput('dto')))
)
server <- function(input,output){
output$dto <- renderDataTable({MYTABLE})
}
runApp(list(ui=ui,server=server))
テーブルの結果をダウンロードするオプションを置く方法はありますか(CSV、XLSXであるかどうかは関係ありません...)
乾杯
データ自体を反応式にする場合、downloadButton()
またはdownloadLink()
をdownloadHandler
と組み合わせて使用するのは非常に簡単です。次に、同じ反応式を使用して、出力に送信するものをダウンロードできます。
小さな例:
_library(shiny)
ui <- fluidPage(
# This one is linked by the id 'download'
downloadButton('download',"Download the data"),
fluidRow(column(7,dataTableOutput('dto')))
)
server <- function(input,output){
# Reactive expression with the data, in this case iris
thedata <- reactive(iris)
output$dto <- renderDataTable({thedata()})
output$download <- downloadHandler(
filename = function(){"thename.csv"},
content = function(fname){
write.csv(thedata(), fname)
}
)
}
runApp(list(ui=ui,server=server))
_
覚えておいてください:
content
の引数downloadHandler
は、ファイルを生成する関数でなければなりません!接続/ファイル名には1つの引数を取る必要があります。この例ではcsvファイルですが、たとえば画像の場合はpng()
およびdev.off()
を使用でき、ggplotsの場合はggsave()
、...を使用できます。filename
は関数である必要はありませんが、その方がうまく機能することがわかりました。特に、ファイル名の反応式を扱う場合。downloadHandler
とdownloadButton
をリンクします。downloadButton
のIDは、downloadHandler
によって返される出力要素の名前です。編集:
このためにdownload.file()
を使用しようとする人もいますが、それも誤りです。関数download.file()
は、サーバー側ではなくユーザー側で使用すると機能します。これにより、インターネットから関数を呼び出しているコンピューターにファイルをダウンロードできます。これをShinyアプリケーションで使用する場合、ローカルで実行すると機能します。これは、ユーザーとサーバーが同じマシンであるためです。ただし、アプリをShinyサーバーにデプロイする場合、download.file()
は基本的にサーバーからではなくサーバーにファイルをダウンロードします。
datatable
/DT
拡張buttons
に直接基づく、少し代替のソリューション。
Jorisからサンプルデータを恥知らずに借りています...
library(shiny)
library(DT)
ui <- fluidPage(
# This one is linked by the id 'download'
fluidRow(column(7,dataTableOutput('dto')))
)
server <- function(input,output){
# Reactive expression with the data, in this case iris
thedata <- reactive(iris)
#the extensions parameter coupled with the options list does the trick
output$dto <- renderDataTable(thedata(), extensions = 'Buttons',
options = list(dom = 'Bfrtip',
buttons = c('copy', 'csv', 'Excel', 'pdf', 'print'))
)
}
runApp(list(ui=ui,server=server), launch.browser=TRUE) #now runs by default in the external browser.
これはさまざまな出力で機能し、個人的には私はよりクリーンな外観が好きです。外部ブラウザでデモを実行していることを確認してください。それ以外の場合は機能しません。
ファイル名が機能しないため、ブラウザでアプリを実行する必要があります。私が使う
runApp(list(ui=ui,server=server),launch.browser = T)
そしてそれは私にとって完璧に機能します。
launch.browser=TRUE
を使用したくない場合は、光沢のあるアプリでダウンロードボタンを使用するときに、ファイル名の最後にファイル名と拡張子.csvなどを記述できます。