Динамическое добавление имен столбцов в R Shiny - PullRequest
0 голосов
/ 27 августа 2018

Совершенно новый для R здесь и не опытный кодер.Я хочу создать простую функцию для загрузки внешнего файла через R блестящий, но файл не будет иметь фиксированное количество столбцов и может иметь или не иметь имя столбца.

В случае, когда сырой файл делаетне имеет заголовка, я хочу, чтобы имя первого столбца было «Дата», а остальные столбцы 2,3,4 ..., n - «Инвестиция 1», «Инвестиция 2», «Инвестиция 3», ..., "Investment n-1" соответственно

Вот мой текущий код, сторона сервера,

server <- function(input, output) {

rawdata <- reactive({
file_to_read = input$file
if(is.null(file_to_read)) {
  return()
} 
    data <- read.table(file_to_read$datapath, sep = input$sep, header = 
input$dataheader)
})


addcolumn <- reactive({
if(input$dataheader = FALSE) {
paste("Date",colnames(rawdata()[,1]))
  for (i in 2:ncol(rawdata())) {
    paste("Investment " + i, colnames(rawdata()[,i]))
  }
}
})

output$datatable <- renderTable({
If(input$dataheader = FALSE) {
  addcolumn(rawdata())
} else {
rawdata()
}
})

и сторона пользовательского интерфейса,

dashboardBody(
    tabItems(
      tabItem(
        tabName = "import",
        fluidRow(
          box(
            title = "Instructions",
            solidHeader = TRUE,
            width = 12,
            status = "warning",
            height = 120, 
            textOutput("instructionsImport")
          ),
          box(
            solidHeader = FALSE,
            width = 3,
            status = "primary",
            fileInput("file","Choose a file to upload"),
            radioButtons("sep","Separator",choices = c(Comma = ",", Space = " ",Period = ".", Tilde = "~", minus = "-")),
            checkboxInput("dataheader","File has header?")
          ),
          box(
            title = "Uploaded Data",
            solidHeader = TRUE,
            width = 9,
            status = "primary",
            tableOutput("datatable")
          )
        )
      ),

В идеале,Я хотел бы, чтобы операция по добавлению имени столбца выполнялась один раз после импорта и создавалась результирующая таблица данных вместо создания реактивной функции для добавления столбца.

Спасибо

1 Ответ

0 голосов
/ 27 августа 2018

Просто измените свой server.R код на:

server <- function(input, output) {

  rawdata <- reactive({
    file_to_read = input$file
    if(is.null(file_to_read)) {
      return()
    } 
    data <- read.table(file_to_read$datapath, sep = input$sep, header = 
                         input$dataheader)
    if(!input$dataheader){
      colnames(data)<-c("Date",paste("Investment",1:(ncol(data)-1)))
    }
    return(data)
  })


  output$datatable <- renderTable({
    rawdata()
  })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...