Записать список списков в файл в R / Shiny - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть список списков, которые я хотел бы записать в файл (.txt или .xlsx) в Shiny.

C = list(listA = list(1:3, structure(1:9, .Dim = c(3L, 3L)), 4:9), 
    listB = list(c("t1", "t2", "t3"), structure(c("p1", "p2"), .Dim = 2:1)))

В R я мог бы использовать команду sink, например:

sink("test.txt")
print(mydata)
sink()

Каким результатом будет текстовый файл:

$listA
$listA[[1]]
[1] 1 2 3

$listA[[2]]
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

$listA[[3]]
[1] 4 5 6 7 8 9


$listB
$listB[[1]]
[1] "t1" "t2" "t3"

$listB[[2]]
     [,1]
[1,] "p1"
[2,] "p2"

Как я могу использовать эту функцию приемника в Shiny, чтобы предоставить пользователю возможность загрузки C?и как я могу удалить индекс строки в выводе?

Я пробовал print(C,row.names = FALSE), но это не работает.

мой желаемый результат должен выглядеть следующим образом:

$listA
$listA[[1]]
1 2 3

$listA[[2]]
     [,1] [,2] [,3]
1    4    7
2    5    8
3    6    9

$listA[[3]]
4 5 6 7 8 9


$listB
$listB[[1]]
"t1" "t2" "t3"

$listB[[2]]
     [,1]
"p1"
"p2"

1 Ответ

0 голосов
/ 29 сентября 2018

Загрузка файла с использованием shiny очень похожа на обычный способ R.Вам необходимо:

  1. создать кнопку загрузки в пользовательском интерфейсе (общая для всех типов загрузки)
  2. Указать sink функцию для загрузки на сервер

Дляпример:

library(shiny)

ui <- fluidPage(
    # Runs downloadHandler in server part
    downloadButton("downloadData", "Download This Data")
)

server <- function(input, output) {

    # Data to download  
    C <- list(listA = list(1:3, structure(1:9, .Dim = c(3L, 3L)), 4:9), 
              listB = list(c("t1", "t2", "t3"), structure(c("p1", "p2"), .Dim = 2:1)))

    # write C to file using sink
    output$downloadData <- downloadHandler(
        filename = function() {"text.txt"},
        content = function(file) {
            # Here you change to csv (write.csv) or excel (xlsx::write.xlsx)
            sink(file); print(C); sink()
        }
    )
}

shinyApp(ui, server)  
...