Я хотел бы иметь возможность преобразовать сценарий, который я использую в своем рабочем процессе, в shinyapp для использования другими пользователями. Я новичок в блеске в целом и использую Rstudio. Мне удалось заставить работать базовую c функциональность, но я изо всех сил пытаюсь извлечь определенные c строки, чтобы добавить их в качестве столбца идентификатора, как я сделал в исходном скрипте.
это функция, которую я хотел бы реализовать в моем блестящем приложении.
##### function to read tab-separated flat file(s) while adding a string from the filename to a column in the table
my_read_tsv <- function(x) {
out <- read_tsv(x, skip = 4) ## skips for header lines
id_code <-
paste(
str_extract(x, "[0-9]{1,6}),
str_extract(x, "[A-Za-z0-9]{1,3}-[A-Za-z0-9]{1,2}_[A-Za-z0-9]{1,3}")
)
cbind(ID = id_code, out)
}
в моем скрипте. Я определяю функцию и затем вызываю ее, как показано ниже
tbl <- lapply(desiredlist, my_read_tsv) %>% bind_rows()
ниже - это то, что мне удалось получить частично, но столбец «id» заполнен значениями «NANA».
#
# This is a Shiny web application. You can run the application by clicking
# the 'Run App' button above.
#
# Find out more about building applications with Shiny here:
#
# http://shiny.rstudio.com/
#
library(shiny)
ui <- fluidPage(
fluidPage(
titlePanel("Combine files"),
sidebarLayout(
sidebarPanel(
fileInput("fileinput",
"Choose files from a directory",
multiple = TRUE,
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv')),
downloadButton('downloadData', 'Download')
),
mainPanel(
tableOutput('contents')
)
)
)
)
library(shiny)
library(dplyr)
library(readr)
library(tidyr)
library(stringr)
options(shiny.maxRequestSize = 200*1024^2) ## scales file size above 5mb limit
server <- function(input, output) {
getData <- reactive({
inFile <- input$fileinput
if (is.null(inFile)){
return(NULL)
}else {
csvfiles <- lapply(inFile$datapath, function(y){
out <- read_tsv(y, skip = 4)
id_code <-
paste(
str_extract(y,"WR[0-9]{1,6}"),
str_extract(y, "[A-Za-z0-9]{1,3}-[A-Za-z0-9]{1,2}_[A-Za-z0-9]{1,3}")
)
cbind(ID = id_code, out)
}
)
do.call(bind_rows, csvfiles)
}
})
output$contents <- renderTable(
getData()
)
output$downloadData <- downloadHandler(
filename = function() {
paste("combined_file", ".csv", sep="")
},
content = function(file) {
write.csv(getData(), file, row.names=FALSE)
})
}
shinyApp(ui = ui, server = server)
Пример данных имеет 4 строки заголовка, затем заголовки строк, затем числовые данные в столбцах 1: 6
EX:
header
header
header
header
row.names
1 2 3 4 5 6
1 2 3 4 5 6