将列表列表写入文件 R/Shiny
Write list of lists into a file in R/Shiny
我有一个列表列表,我想在 Shiny 中写入一个文件(.txt 或 .xlsx)。
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()
其中结果是一个txt文件:
$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 中使用这个 sink 函数来提供下载选项供用户下载 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"
使用 shiny
下载文件与通常的 R 方式非常相似。您需要:
- 在 UI 中创建下载按钮(适用于所有下载类型)
- 在服务器下载部分指定
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)
我有一个列表列表,我想在 Shiny 中写入一个文件(.txt 或 .xlsx)。
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()
其中结果是一个txt文件:
$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 中使用这个 sink 函数来提供下载选项供用户下载 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"
使用 shiny
下载文件与通常的 R 方式非常相似。您需要:
- 在 UI 中创建下载按钮(适用于所有下载类型)
- 在服务器下载部分指定
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)