Это должно сработать
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)
Скорректированный выход сначала сохраняется в реактиве VAL с именем sent2()
. Это необходимо для того, чтобы вы увидели значения приставки при запуске приложения Shiny.
A selectizeInput()
используется для прокрутки слов (Q1).
radioButtons()
используются для выбора значений positive
и negative
. Значением по умолчанию является любое значение, которое в настоящее время применяется к соответствующему слову.
actionButton()
используется для внесения изменений при желании.
ОБНОВЛЕНИЕ: я добавил sent <<- out
, чтобы ваш sent
кадр данных действительно обновлялся. Имейте в виду, что это заменит значения, которые вы сохранили в sent
ранее.
ОБНОВЛЕНИЕ: При каждом нажатии кнопки действия индекс текущего выбранного слова определяется с помощью which()
. Затем он увеличивается и сохраняется в i
и i2()
. Новый индекс используется для определения значения по умолчанию selectizeInput()
. Таким образом, когда ручной выбор слов не выполняется, вы будете прокручивать все варианты. Когда слово выбрано вручную, вы продолжите увеличиваться с этого слова. При достижении последнего слова значение не увеличивается далее