R闪亮应用程序-当用户下次触发应用程序刷新时,我如何自动使用我最近的输出作为输入的一部分?
我是Shiny的新手,我正在构建一个带有文本框的Shiny应用程序。它用于预测文本,因此用户在这个框中键入一些内容,应用程序调用一个函数,返回用户当前键入的单词的一些可能性 为此,它扫描一些单词文件/单词序列,并提取一个子集,其中包含与用户迄今为止键入的内容或部分键入内容相匹配的所有行 当用户继续键入时,并不总是需要重新打开整个文件并重新对其进行子集划分-如果我将前一个子集向前推进,则该操作将运行得更快,以便根据进一步的用户输入进一步对其进行子集划分。考虑到这一点,我的函数返回一个列表,其中包含建议及其来源的子集 如何使文件子集传回函数,以便在用户键入下一个字符时使用?有人举过这样一个例子吗R闪亮应用程序-当用户下次触发应用程序刷新时,我如何自动使用我最近的输出作为输入的一部分?,r,shiny,R,Shiny,我是Shiny的新手,我正在构建一个带有文本框的Shiny应用程序。它用于预测文本,因此用户在这个框中键入一些内容,应用程序调用一个函数,返回用户当前键入的单词的一些可能性 为此,它扫描一些单词文件/单词序列,并提取一个子集,其中包含与用户迄今为止键入的内容或部分键入内容相匹配的所有行 当用户继续键入时,并不总是需要重新打开整个文件并重新对其进行子集划分-如果我将前一个子集向前推进,则该操作将运行得更快,以便根据进一步的用户输入进一步对其进行子集划分。考虑到这一点,我的函数返回一个列表,其中包含
*另外,我注意到有20个人读了这篇文章却没有回答,我这样问有什么问题吗?我已经实现了你想法的一个最小示例。它将初始数据加载到全局变量中,反应块更新全局子列表变量。子列表写在主面板上,子列表的长度打印在控制台上,以表明列表实际上随着字母数的增加而变短
library(shiny)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
textInput("text", "Text to be searched")
),
mainPanel(
textOutput("textOut")
)
)
)
server <- function(input, output) {
wordlist <- c("a", "ab", "abc", "abcd", "abcde", "different")
# With pre-defined file
# wordlist <- read.delim("/path/to/the/file.txt", header = FALSE, sep = ",")
sublist <- NULL
newList <- reactive({
if (input$text == ""){
sublist <<- wordlist
} else {
temp <- sublist
sublist <<- NULL
sublist <<- temp[grepl(input$text, temp)]
}
sublist
})
output$textOut <- renderText({
newList <- newList()
cat(paste("Length of the sublist is: ", length(sublist), "\n"))
newList
})
}
shinyApp(ui = ui, server = server)
值得一提的是,使用全局变量递归地执行此操作可能不是一个好主意在reactive中更改全局变量并不是一个好的做法,从搜索词中删除字母至少会触发新的搜索,等等。但是作为一个基础,您不应该在用户每次输入新字母时打开并读取文件,列表只应加载一次。跳过连续文件打开/关闭将比使用子集更影响运行时间