我已经开始编写一个闪亮的应用程序。
我想要实现的是在一行中加载一个带有字符串的文本文件 - 像这样:
$ cat testdata.txt
hello world
如果文本被加载,元音在数据框中设置为值 1 并与shinyBS
包一起突出显示。
我想要实现的是能够通过单击切换按钮来更改数据框中的值。可以切换按钮,但更改的值不会传输到数据框或绘图。
如何做到这一点?我希望问题很清楚,如果没有,请询问,我会尝试重新表述问题并使其更清楚。
这是 和 的ui.R
代码server.R
。
用户界面
library(shiny)
shinyUI(pageWithSidebar(
headerPanel("Test buttons"),
sidebarPanel(
fileInput('file1', 'Choose text file',
accept=c('text',
'text/plain',
'.txt')),
tags$hr()
),
mainPanel(
tabsetPanel(
tabPanel("Home"),
tabPanel("Loaded Text",
br(),
tableOutput("showOverview")),
tabPanel("Text fields",
br(),
uiOutput("createButtons")),
tabPanel("Plots",
br(),
plotOutput("showDistribution"))
)
)
))
服务器.R
library(shiny)
library(shinyBS)
shinyServer(function(input, output) {
fileReadText <- reactive({
inFile <- input$file1
if (is.null(inFile))
return(NULL)
uploadReadText <- read.table(inFile$datapath, sep = "|",
stringsAsFactors = FALSE)
df <- data.frame(V1 = unlist(strsplit(uploadReadText[1,], "")))
df$V2 <- as.integer(grepl("[aeiou]", df$V1))
df$V2 <- ifelse(df$V1 == " ", NA, df$V2)
names(df) <- c("letter", "value")
df
})
output$showOverview <- renderTable({
data1 <- fileReadText()
data1[c(1:10),]
})
output$createButtons <- renderUI({
data1 <- fileReadText()
listOfButtons = list()
for (i in 1:length(data1$letter)) {
buttonValue <- as.logical(data1$value[i])
buttonDisabled = FALSE
if (is.na(buttonValue)) {
buttonValue = 0
buttonDisabled = TRUE
}
listOfButtons <- list(listOfButtons,
bsButton(paste("button_", i, sep = ""),
data1$letter[i],
type = "toggle",
value = as.logical(buttonValue),
disabled = buttonDisabled))
}
listOfButtons
})
output$showDistribution <- renderPlot({
data1 <- fileReadText()
plot(data1$value)
})
})