【发布时间】:2019-04-17 04:39:31
【问题描述】:
当我按下“清理”操作按钮时,我的代码能够上传 csv/文本文件,但无法清理数据。我不确定是什么问题,当我在数据表和数据框表单中尝试时都不起作用。我的代码的目的是让用户:
- 上传文件
- 按 clean 清除数据
- 下载清理后的文件
我们将不胜感激!
数据表形式:
library(data.table)
library(DT)
runApp(shinyApp(
ui=(fluidPage(
titlePanel("Clean your data!"),
mainPanel(
fileInput("file", "Upload file"),
actionButton("Go", "Clean!"),
DT::dataTableOutput("df_data_out"),
downloadButton("downloadData","Download")
)
)),
server <- function(input, output){
myData <- reactive({
inFile <- input$file
if (is.null(inFile)) return(NULL)
data <- read.csv(inFile$datapath, header = TRUE)
data <- as.data.table(data)
})
eventReactive(input$Go, {
dt <- myData()
dt <- as.data.table(dt)
dt1 <- dt[, splitletter:=substr(DocRef,1,1)]
dt2 <- dt1[splitletter == "B" | splitletter == "I"]
dt3 <- dt2[DocDate <= 20171231 & DocDate >= 20160101]
dt3 <- dt3[AcCurWTaxAmt>0 & HomeWTaxAmt<0,
HomeWTaxAmt:=abs(HomeWTaxAmt)]
dt3 <- dt3[AcCurWTaxAmt<0 & HomeWTaxAmt>0, HomeWTaxAmt:=HomeWTaxAmt*
(-1)]
dt3 <- dt3[AcCurWTaxAmt==0 & HomeWTaxAmt!=0, HomeWTaxAmt:=0]
dt3 <- dt3[AcCurWTaxAmt!=0 & HomeWTaxAmt==0, HomeWTaxAmt:=NA]
dt4 <- na.omit(dt3)
dt4 <- dt4[, AcCrAmt := AcCrIsMinus1 * AcCurWTaxAmt]
dt4 <- dt4[, splitletter:= NULL]
})
output$df_data_out <- DT::renderDataTable({
DT::datatable(myData())})
output$downloadData <- downloadHandler(
filename = function() {
paste("data-", Sys.Date(), ".csv", sep="")
},
content = function(file) {
write.csv(myData(), file)
})
}))
数据框形式:
runApp(shinyApp(
ui=(fluidPage(
titlePanel("Clean your data!"),
mainPanel(
fileInput("file", "Upload file"),
actionButton("Go", "Clean!"),
tableOutput("df_data_out"),
downloadButton("downloadData","Download")
)
)),
server <- function(input, output){
myData <- reactive({
inFile <- input$file
if (is.null(inFile)) return(NULL)
df_data <- read.csv(inFile$datapath, header = TRUE)
df_data <- as.data.frame(df_data)
})
eventReactive(input$Go, {
dt <- myData()
dt <- as.data.frame(data)
dt1[, splitletter] <- substr(dt$DocRef,1,1)
dt2 <- (dt1$splitletter == "B" | dt1$splitletter == "I")
dt3 <- (dt2$DocDate <= 20171231 & dt2$DocDate >= 20160101)
while(dt3$AcCurWTaxAmt>0 & dt$HomeWTaxAmt<0){
dt3$HomeWTaxAmt <- abs(dt3$HomeWTaxAmt)
}
while(dt3$AcCurWTaxAmt<0 & HomeWTaxAmt>0){
dt3$HomeWTaxAmt <- dt3$HomeWTaxAmt*(-1)
}
while(dt3$AcCurWTaxAmt==0 & HomeWTaxAmt!=0){
dt3$HomeWTaxAmt <- 0
}
while(dt3$AcCurWTaxAmt!=0 & HomeWTaxAmt==0){
dt3$HomeWTaxAmt<- NA
}
dt3 <- na.omit(dt3)
dt3[,AcCrAmt] <- dt3$AcCrIsMinus1 * dt3$HomeWTaxAmt
dt3$splitletter <- NULL
})
output$df_data_out <- renderTable({
myData()
})
output$downloadData <- downloadHandler(
filename = function() {
paste("data-", Sys.Date(), ".csv", sep="")
},
content = function(file) {
write.csv(myData(), file)
})
}))
【问题讨论】:
-
cleanedData <- eventReactive({...})然后使用cleandata()而不是myData() -
感谢您的回复!但是当我尝试这样做时,我得到了这些错误: 警告:$ 中的错误:'closure' 类型的对象不是子集 138:substr 137:eventReactiveHandler [#23] 93:cleanData 92:renderTable [#45] 91:func 78 : origRenderFunc 77: 输出$df_data_out 1: runApp