Я пытаюсь создать блестящее приложение, и я никогда не делал этого раньше.
Я хочу разрешить пользователю загружать данные из файла CSV по выбору пользователя, который выглядит примерно так:
ID Date Name Amount
123 01/12/2018 John Doe 100
124 01/02/2018 Bob Smith 110
125 01/03/2018 Jane Jones 100
126 01/02/2018 John Doe 110
127 01/03/2018 Bob Smith 100
128 01/04/2018 Jane Jones 110
129 01/03/2018 John Doe 100
130 01/04/2018 Bob Smith 110
131 01/04/2018 Jane Jones 120
132 01/14/2018 Tom Thomas 100
Затем я хочу, чтобы приложение ИСПОЛЬЗОВАЛО эти данные для запуска такого кода:
as.Date(myDF$Date, format="%m/%d/%Y")
sortedByDate = myDF[order(myDF$Date)]
amountPerDate = aggregate(data=myDF, Amount ~ Date, sum)
amountPerDate
для создания такого вывода:
Date Amount
01/02/2018 220
01/03/2018 300
01/04/2018 340
01/12/2018 100
01/14/2018 100
чтобы пользователь мог видеть общую сумму за дату с датами в правильном порядке. Я делал подобные вещи в обычном скрипте R в течение нескольких месяцев, но никогда раньше не пробовал это в блестящем.
Итак, чтобы загрузить данные в блестящий, я использую этот код:
shinyServer(function(input, output){
output$contents <- renderTable({
inFile <- input$file1
if(is.null(inFile))
return(NULL)
userData = read.csv(inFile$datapath, sep=",")
#here I run chunks of code to clean the data
#assign data frame to global environment
assign("userData", userData, envir = .GlobalEnv)
#display data table in app
userData
})
Итак, теперь пользователь может просматривать данные, но не может ничего с ними СДЕЛАТЬ.
Фрейм данных в глобальной среде имеет каждую переменную как фактор класса. Я думал, что будет легко принудить переменные к их соответствующим классам (Числовой для «ID» и «Суммы», Символ для «Имени» и Дата для «Даты», но я не могу это сделать. Следующее, что я пытаюсь чтобы приложение отображало дату в первой строке, я попробовал это с помощью этого кода:
output$text <- renderText({
userData$Date = as.Date(as.character(userData$Date), format = "%m/%d/%Y")
userData[1,2]
})
Но вывод в приложении 17533, а НЕ 12.01.2018, как я ожидал.
По какой-то странной причине следующий код БУДЕТ выводить 12.01.2018:
output$text <- renderText({
userData$Date = as.character(userData$Date)
userData[1,2]
})
но мне нужно, чтобы даты были классом DATE, а не символом класса.
Без возможности принудить переменные к соответствующим классам все мое приложение бесполезно. Пожалуйста помоги.