R Shiny:修改数据框中的输出值
R Shiny: Modify output values in a data frame
以下简单闪亮的应用程序显示存储在名为 sent
的 R 数据框中的单词及其情绪。
library(shiny)
sent <- data.frame(word=c('happy', 'sad', 'joy', 'upset'),
sentiment=c('positive', 'negative', 'positive', 'negative'),
stringsAsFactors = FALSE)
ui <- fluidPage(
numericInput(inputId = 'num', label='', value=1, min=1, max=nrow(sent)),
br(),
h4("Word:"),
textOutput('word'),
br(),
h4("Sentiment:"),
textOutput('sentiment')
)
server <- function(input, output){
output$word <- renderText({ sent$word[input$num] })
output$sentiment <- renderText({ sent$sentiment[input$num] })
}
shinyApp(ui=ui, server=server)
我想通过两种方式修改它:
(1) 我希望用户能够滚动浏览 sent$word
列中的单词,而不是使用 numericInput()
(2) 更重要的是,我希望用户能够修改与每个词关联的情感值。理想情况下,这将是一个下拉菜单(带有 'positive' 和 'negative' 作为选项),它将显示存储在 sent
中的该词的当前情绪值,但可以通过用户并在数据框中被覆盖。
有什么建议吗?
这应该可以解决问题
library(shiny)
sent <- data.frame(word=c('happy', 'sad', 'joy', 'upset'),
sentiment=c('positive', 'negative', 'positive', 'negative'),
stringsAsFactors = FALSE)
sent2 <- reactiveVal(sent)
i <- 1
i2 <- reactiveVal(i)
ui <- fluidPage(
uiOutput("wordSelect"),
br(),
h4("Word:"),
textOutput('word'),
br(),
h4("Sentiment:"),
textOutput('sentiment'),
br(),
uiOutput("change"),
actionButton("go","Change")
)
server <- function(input, output){
output$wordSelect <- renderUI({
selectizeInput(inputId = 'wrd', label='select word', choices=sent$word, selected=sent$word[i2()])
})
output$word <- renderText({ input$wrd })
output$sentiment <- renderText({ sent$sentiment[which(sent2()$word==input$wrd)] })
observeEvent(input$go, {
out <- sent
out$sentiment[which(sent$word==input$wrd)] <- input$newLabel
sent <<- out
sent2(out)
i <<- which(sent$word==input$wrd)+1
if(i > length(sent$word)) {
i <<- i - 1
}
i2(i)
})
output$change <- renderUI({
radioButtons("newLabel", label="Change value", choices=c('positive','negative'), sent$sentiment[which(sent2()$word==input$wrd)])
})
}
shinyApp(ui=ui, server=server)
调整后的输出首先存储在名为 sent2()
的反应值中。当 运行 Shiny App.
时,您需要查看 adjure 值
A selectizeInput()
用于滚动单词 (Q1)。
radioButtons()
用于 select positive
和 negative
值。默认值是当前应用于相应单词的任何值。
actionButton()
用于在需要时进行更改。
更新:我添加了 sent <<- out
以便您的 sent
数据框实际得到更新。请注意,这将覆盖您之前存储在 sent
中的值。
更新:每次单击操作按钮时,当前 selected 单词的索引将使用 which()
确定。然后递增并存储在i
和i2()
中。新索引用于确定 selectizeInput()
的默认值。这样,当没有手动 selection of words 完成时,您将滚动浏览所有选项。当手动 select 编辑一个单词时,您将继续从该单词开始递增。当到达最后一个单词时,该值不会进一步增加
以下简单闪亮的应用程序显示存储在名为 sent
的 R 数据框中的单词及其情绪。
library(shiny)
sent <- data.frame(word=c('happy', 'sad', 'joy', 'upset'),
sentiment=c('positive', 'negative', 'positive', 'negative'),
stringsAsFactors = FALSE)
ui <- fluidPage(
numericInput(inputId = 'num', label='', value=1, min=1, max=nrow(sent)),
br(),
h4("Word:"),
textOutput('word'),
br(),
h4("Sentiment:"),
textOutput('sentiment')
)
server <- function(input, output){
output$word <- renderText({ sent$word[input$num] })
output$sentiment <- renderText({ sent$sentiment[input$num] })
}
shinyApp(ui=ui, server=server)
我想通过两种方式修改它:
(1) 我希望用户能够滚动浏览 sent$word
列中的单词,而不是使用 numericInput()
(2) 更重要的是,我希望用户能够修改与每个词关联的情感值。理想情况下,这将是一个下拉菜单(带有 'positive' 和 'negative' 作为选项),它将显示存储在 sent
中的该词的当前情绪值,但可以通过用户并在数据框中被覆盖。
有什么建议吗?
这应该可以解决问题
library(shiny)
sent <- data.frame(word=c('happy', 'sad', 'joy', 'upset'),
sentiment=c('positive', 'negative', 'positive', 'negative'),
stringsAsFactors = FALSE)
sent2 <- reactiveVal(sent)
i <- 1
i2 <- reactiveVal(i)
ui <- fluidPage(
uiOutput("wordSelect"),
br(),
h4("Word:"),
textOutput('word'),
br(),
h4("Sentiment:"),
textOutput('sentiment'),
br(),
uiOutput("change"),
actionButton("go","Change")
)
server <- function(input, output){
output$wordSelect <- renderUI({
selectizeInput(inputId = 'wrd', label='select word', choices=sent$word, selected=sent$word[i2()])
})
output$word <- renderText({ input$wrd })
output$sentiment <- renderText({ sent$sentiment[which(sent2()$word==input$wrd)] })
observeEvent(input$go, {
out <- sent
out$sentiment[which(sent$word==input$wrd)] <- input$newLabel
sent <<- out
sent2(out)
i <<- which(sent$word==input$wrd)+1
if(i > length(sent$word)) {
i <<- i - 1
}
i2(i)
})
output$change <- renderUI({
radioButtons("newLabel", label="Change value", choices=c('positive','negative'), sent$sentiment[which(sent2()$word==input$wrd)])
})
}
shinyApp(ui=ui, server=server)
调整后的输出首先存储在名为 sent2()
的反应值中。当 运行 Shiny App.
A selectizeInput()
用于滚动单词 (Q1)。
radioButtons()
用于 select positive
和 negative
值。默认值是当前应用于相应单词的任何值。
actionButton()
用于在需要时进行更改。
更新:我添加了 sent <<- out
以便您的 sent
数据框实际得到更新。请注意,这将覆盖您之前存储在 sent
中的值。
更新:每次单击操作按钮时,当前 selected 单词的索引将使用 which()
确定。然后递增并存储在i
和i2()
中。新索引用于确定 selectizeInput()
的默认值。这样,当没有手动 selection of words 完成时,您将滚动浏览所有选项。当手动 select 编辑一个单词时,您将继续从该单词开始递增。当到达最后一个单词时,该值不会进一步增加