问题解决了,每次迭代都会添加新行。
新的文本数据集:
# AREA ADC-MEAN ADC-STD DEV ADC-MIN ADC-MAX ADC-MED
1 12.0000 0.000644667 1.96669e-005 0.000606000 0.000671000 0.000644000
2 12.0000 0.000610250 1.43154e-005 0.000577000 0.000624000 0.000617000
3 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
4 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
5 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
6 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
7 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
8 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
9 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
10 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
# AREA FA-MEAN FA-STD DEV FA-MIN FA-MAX FA-MED
1 12.0000 0.233833 0.0171773 0.201000 0.262000 0.239000
2 12.0000 0.247417 0.0135275 0.220000 0.270000 0.248000
3 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
4 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
5 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
6 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
7 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
8 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
9 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
10 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
ADC-MEAN
0.000644667
0.000610250
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
ADC-STD DEV
1.96669e-005
1.43154e-005
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
FA-MEAN
0.233833
0.247417
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
FA-STD DEV
0.0171773
0.0135275
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
以及修改后的代码
library(shiny)
library(ggplot2)
library(xlsx)
library(xlsxjars)
library(rJava)
library(shinythemes)
# Define UI -----------
# ---------------------
ui <- fluidPage(theme = shinytheme("sandstone"),
# header
headerPanel("DTI post analysis conversion"),
sidebarLayout(
# sidebar for form
sidebarPanel(
h3("Information",""),
textInput("ani_id", "Patient ID",""),
textInput("scan_id", "Scan ID",""),
textInput("Tech_id", "Tech Id",""),
textInput("Age_weeks", "Age weeks",""),
fileInput("textfile", "Upload the text file"),
actionButton("update", "Insert 1st Data Set"),
helpText("Click to insert the data "),
br(),
fileInput("anothertextfile", "Upload another Text file"),
actionButton("addEntry", "Add New Data"),
helpText("Click to insert new data "),
br(),
actionButton("combine", "Combine the data sets"),
downloadButton("downloadData", "Download"),
helpText("Click for download the data (.csv) ")
),
# output for viewing
mainPanel(
DT::dataTableOutput("tableDT"),
DT::dataTableOutput("tableDT2")
)
)
)
# Define server logic ------
# --------------------------
server <- function(input, output) {
# process the textinput
Frontal_Cortex_table <- reactive({
# creating table
aniRoi2 <- data.frame(Animal_ID = rep(input$ani_id,2),
Scan_ID = rep(input$scan_id,2),
Tech_ID = rep(input$Tech_id,2),
Age_weeks = rep(input$Age_weeks,2),
stringsAsFactors = FALSE)
return(aniRoi2)
})
# process the text file and download
textdata <- reactive(
{
file1 <- input$textfile
if(is.null(file1)){return()}
#read.table(file=file1$datapath, sep=input$sep, header = input$header, stringsAsFactors = input$stringAsFactors)
a <- read.table(file= file1$datapath,
sep="\t",
fill=FALSE,
strip.white=TRUE)[1:20,]
# Split the text file and shape as column
af <- as.character(a)
#class(af)
#af
#nrow(a)
af1 <- matrix(unlist(strsplit(af, split=" +")), ncol=7, byrow =TRUE)
# typeof(af1)
# af1
ad <- data.frame(af1[1:2,3:7], af1[11:12, 3:7])
colnames(ad)<- c("ADC_MEAN", "ADC_STD", "ADC_MIN", "ADC_MAX", "ADC_MED",
"FA_MEAN", "FA_STD", "FA_MIN", "FA_MAX", "FA_MED")
return(ad)
})
# merge two function as data.frame
mytable2 <-eventReactive(input$update,{
dm <<- cbind.data.frame(Frontal_Cortex_table(), textdata())
})
# add new row (?)
addData1 <- eventReactive(input$addEntry, {
newLine <<- cbind.data.frame(Frontal_Cortex_table(), textdata())
})
addData <- eventReactive(input$addEntry, {
dm <<- rbind.data.frame(mytable2(),addData1())
})
addData2 <- eventReactive(input$addEntry, {
dm <<- rbind.data.frame(dm,addData1())
})
# output as data table
output$tableDT <- DT::renderDataTable(
mytable2()
)
# the combined data set with added row
output$tableDT2 <- DT::renderDataTable(
addData2()
)
# download the file
output$downloadData <- downloadHandler(
filename = function() {
paste("DTI", "csv", sep = ".")
},
content = function(file) {
write.csv(mytable2(), file, row.names = FALSE)
}
)
}
# Run the app ----------
# ----------------------
shinyApp(ui = ui, server = server)
希望这会有所帮助。