闪亮的反应功能没有按预期更新

2024-01-24

原始问题发布在这里: 闪亮的反应性意外行为 https://stackoverflow.com/questions/27478028/shiny-reactive-unexpected-behavior
该问题被重新发布在这里,试图改进之前在上面提供的链接中发布的原始问题,因为我无法获得任何帮助。

客观的:简而言之,该应用程序的目的是允许用户根据提供给用户的各种输入执行搜索、过滤以及对数据帧中提供的数据进行切片和切块。

作为server函数,一个名为的反应函数index已定义为查找与用户输入相对应的索引。反应函数,index, uses grep and which用于在数据帧中定位相应索引的函数df.

我已经包含了可重现的代码,并尝试在适当的情况下包含注释。

关于代码的进一步解释:
这个问题的标题只是我自己的猜测,它基于以下假设:index是正确的。里面的代码可能存在根本问题index而不是反应性index发挥必然作用。为了测试这一点,作为server函数,我已经包含了一个函数printIndex为了打印结果index以确保其正常工作。

我亲自尝试过打印结果ind.j, ind.c, ind.l,ind.d, ind.s, and ind.all每一个都单独连接到控制台,它们似乎都产生了正确的结果。然而,当我测试结果时ind这并不完全符合我的预期,所以我想知道是否是反应性或代码行有问题。什么是ind打算做的是获取所有查找索引的列表,存储在ind.all,并应用intersect递归地从所有子列表中查找公共元素ind.all.

正如我上面提到的,index函数对于单个过滤器效果很好。但是,当我作为用户输入所有索引的值时,该函数不会按预期更新为正确的索引列表。例如,您可以尝试在“应用程序”中输入“应用程序”Job文本输入,“Gas Drive Global”CompanyselectizeInput,和“卡尔加里”Location同时输入文字并点击Search!。您将看到数据表没有返回任何结果,而这显然对应于数据框的第一行df.

#Load required packages
ListofPackages= c('shiny','ggplot2','scales')
lapply(ListofPackages,require,character.only=TRUE)

#Define the dataframe on which the search will be performed
df <- data.frame(Job=c('Applications Engineer ââ¬â Gas Drive',
                       'Engineer, Operations',
                       'Project Engineer',
                       'Project Engineer (Oil & Gas)',
                       'Project Engineer',
                       'Junior Engineer',
                       'Engineer, Operations',
                       'Research and Development (R&D) Junior Engineer',
                       'JUNIOR QUALITY ENGINEER',
                       'Junior Systems Design and Support Engineer',
                       'Mechanical Engineer Calgary, AB',
                       'Applications Engineer',
                       'Project Engineer',
                       'Pipeline Engineer',
                       'Development Engineer',
                       'Specialist Engineering Finance',
                       'Mechanical Engineer - Sudbury',
                       'Project Cost Analyst (12 month term)',
                       'Project Controls Functional Analyst',
                       'Project Controls Professionals'),
             Company=c('Gas Drive Global',
                       'Agrium Wholesale',
                       'City of Calgary',
                       'Stantec',
                       'Shell',
                       'Canadian National Railway',
                       'Pembina Pipeline Corporation',
                       'Velan Inc.',
                       'G.W. Goudreau Personnel Services Ltd',
                       'Stratified Automotive Controls',
                       'Pason Systems Corp.',
                       'Howden',
                       'Plains Midstream Canada',
                       'Amec Foster Wheeler',
                       'Red Bend Software',
                       'Canadian Pacific',
                       'GENIVAR',
                       'Thales',
                       'AltaGas Ltd.','BEMAC Construction Corp.'),
            Location=c('Calgary',
                      'Redwater',
                      'Calgary',
                      'Edmonton',
                      'Sarnia',
                      'Montréal',
                      'Calgary',
                      'Montréal',
                      'Windsor',
                      'Vancouver',
                      'Calgary',
                      'Winnipeg',
                      'Calgary',
                      'Calgary',
                      'Engineer',
                      'Calgary',
                      'Greater Sudbury',
                      'Ottawa',
                      'Calgary',
                      'Calgary'),
              Posted=c(1,
                       1,
                       1,
                       2,
                       2,
                       1,
                       4,
                       5,
                       6,
                       4,
                       1,
                       5,
                       5,
                       3,
                       1,
                       1,
                       15,
                       1,
                       1,
                       13),
             Source=c('Indeed',
                      'Indeed',
                      'Indeed',
                      'Indeed',
                      'Indeed',
                      'Indeed',
                      'Indeed',
                      'Indeed',
                      'Indeed',
                      'Indeed',
                      'Indeed',
                      'Indeed',
                      'Indeed',
                      'Indeed',
                      'Indeed',
                      'Indeed',
                      'Indeed',
                      'Indeed',
                      'Indeed',
                      'Indeed'),
                url=c('http://ca.indeed.com/rc/clk?jk=2371e16aab902f84',
                      'http://ca.indeed.com/rc/clk?jk=428facb738edd397',
                      'http://ca.indeed.com/rc/clk?jk=e15d8fe4d362279b',
                      'http://ca.indeed.com/rc/clk?jk=28c1464fd4e28b24',
                      'http://ca.indeed.com/rc/clk?jk=736ec57bf6902b93',
                      'http://ca.indeed.com/rc/clk?jk=bdc9999eae922645',
                      'http://ca.indeed.com/rc/clk?jk=3a4588fca0e600b1',
                      'http://ca.indeed.com/rc/clk?jk=71f1abcd100850c6',
                      'http://ca.indeed.com/cmp/G.W.Goudreau-Personnel-Services-Ltd/jobs/Junior-Quality-Engineer-3237601a1f3d3abc?r=1',
                      'http://ca.indeed.com/cmp/Stratified-Automotive-Controls/jobs/Junior-System-Design-Support-Engineer-1d916a435e69b8ce?r=1',
                      'http://ca.indeed.com/rc/clk?jk=fca9a784a37ece8a',
                      'http://ca.indeed.com/rc/clk?jk=b2d0975c638c03a8',
                      'http://ca.indeed.com/rc/clk?jk=c92725272c5f9ced',
                      'http://ca.indeed.com/rc/clk?jk=cd97c050df64787c',
                      'http://ca.indeed.com/rc/clk?jk=e6e278ed52532f73',
                      'http://ca.indeed.com/rc/clk?jk=a1f14d52c7798d7b',
                      'http://ca.indeed.com/rc/clk?jk=112350d5e020241f',
                      'http://ca.indeed.com/rc/clk?jk=a324c2dcade7dc5c',
                      'http://ca.indeed.com/rc/clk?jk=77895efdf28ad6fa',
                      'http://ca.indeed.com/cmp/BEMAC-Construction-Corp./jobs/Project-Control-Professional-90796e764f064a51?r=1'))

server <- function(input,output,session){

    #Server-side search for the choices argument of selectizeInput in ui.R
    updateSelectizeInput(session, 'c', choices = as.character(df$Company), server = TRUE)

    #Create a reactive function to look up the indices correponding to the user's inputs
    index <- reactive({
        ind.j <- if(input$j=='') NULL else grep(input$j,df[,'Job'],ignore.case = T)
        ind.c <- {tmp<-lapply(input$c, function(x) {which(df[,'Company']==x)}); Reduce(union,tmp)}
        ind.l <- if(input$l=='') NULL else grep(input$l,df[,'Location'],ignore.case = T)
        ind.d <- which(df[,'Posted']<=input$d)
        ind.s <- {tmp<-lapply(input$s, function(x) {which(df[,'Source']==x)}); Reduce(union,tmp)}
        ind.all <- list(ind.j,ind.c,ind.l,ind.d,ind.s)
        ind <- if(is.null(ind.s)) NULL else {ind.null<- which(lapply(ind.all,is.null)==TRUE) ;Reduce(intersect,ind.all[-ind.null])}

    })

    #Create a reactive function to return the search results by returning the indices looked up in the index function above
    search <- reactive({

              df[index(),]

    })

    #Print the results of the index function above to test if it works properly
    output$printIndex <- renderUI({
           list(index())
    })

    #Send the searchresult table to ui.R to print the results of the search function above
    output$searchresult <- renderDataTable({
        input$action6   #triggered only when button is pressed
        if(input$action6==0) return() 
        else{isolate({
            transformed <- transform(search(), Link = paste('<a href = ', shQuote(url), '>', 'Click</a>'))
            transformed <- transformed[,c(1:3,5,7,4,6)] #Rearrange columns
            transformed[-7] #Remove last column
        })
        }
    }, option=list(autoWidth=FALSE,pageLength=100,
                   columnDefs = list(list(targets =c(5,6) -1, searchable = FALSE),list(sWidth=c("100px")))))


}

ui <- shinyUI(fluidPage(

    #Display datatable filters on top
    tags$head(tags$style("tfoot {display: table-header-group;}")),        

    #Add a title
    h1('Power Search'),

    #Use the Sidebar layout
    sidebarLayout(
        sidebarPanel(

            #Add various fields for the user in order to search the dataframe  
                     h5('Note: Running the app takes a little while at startup.'),
                     helpText('Job:'),
                     textInput('j',''),
                     helpText('Company:'),
                     selectizeInput('c','',choices=NULL,multiple=T),
                     helpText('Location:'),
                     textInput('l',''),
                     sliderInput('d','Posted (days ago)',min = 0,max = 60,step = 5,value = 60),
                     checkboxGroupInput('s','',choices = c('Indeed','Glassdoor'),selected = c('Indeed','Glassdoor')),
                     actionButton('action6','Search!')
        ),


        mainPanel(

            #Display results
            htmlOutput('printIndex'),
            dataTableOutput('searchresult')
        )      

    )
))

shinyApp(ui = ui, server = server)

你遇到的问题是which功能:

> which(rep(FALSE, 5))
integer(0)

你可以改变:

ind <- if(is.null(ind.s)){
  NULL
}else{
  ind.null<- which(lapply(ind.all,is.null)==TRUE)
  Reduce(intersect,ind.all[-ind.null])
}

to

ind <- if(is.null(ind.s)){
  NULL
}else{
  Reduce(intersect,ind.all[!sapply(ind.all,is.null)])
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

闪亮的反应功能没有按预期更新 的相关文章

随机推荐

  • 2D 和 3D 数组的动态分配/释放

    我知道动态分配 取消分配 2D 数组的算法 但是我不太确定 3D 数组的算法 利用这些知识和一点对称性 我想出了以下代码 在编码过程中我很难以 3D 形式进行可视化 请评论正确性并建议任何更好的替代方案 效率或直观 如果有 另外 我认为这些
  • iOS的睡眠功能是什么

    我正在寻找一个函数 可以让 iOS 上的 C 代码甚至 Objective C 代码的线程进入休眠状态 我的编译器无法识别 sleep 0 Thanks 阻止 0 5 秒 NSThread sleepForTimeInterval 5
  • 从 R 中的大型 .CSV 导入和提取随机样本

    我正在 R 中进行一些分析 需要处理一些大型数据集 10 20GB 存储在 csv 中 并使用 read csv 函数 由于我还需要将大型 csv 文件与其他数据帧合并和转换 因此我没有计算能力或内存来导入整个文件 我想知道是否有人知道导入
  • 使用 C# 驱动程序将 UDT 元素添加到 Cassandra 中的列表集合的正确方法是什么?

    我有一个 UDT 列表 例如 create table MyTable stuff list
  • 将嵌入的 Pod 打印为带 termcap 转义的格式化文本

    我正在尝试将嵌入式 Pod 作为 ANSI 文本输出到终端 在 Perl 5 中我可以使用Pod Text Termcap https metacpan org pod Pod Text Termcap use strict use war
  • 如何中止来自 Observable 的 Ajax 请求?

    我的代码包含这个简单的函数 我用它来将文件上传到我的 PHP 服务器 有一个xhr请求嵌套在RxJS Observable fileUpload file File Observable
  • VB.NET 中从另一个线程挂起一个线程

    我有一个从线程 我们称之为 MainThread 运行的窗口 以及一个执行其他非图形任务的后台线程 有时后台线程会调用MessageBox Show 方法 即modal并停止后台线程 在此调用之前 我想挂起 MainThread 并在之后恢
  • Html 选取框标签

    html marquee 标签是否已弃用 如果是 现代浏览器上有哪些替代方案 我想在我的 joomla 页面上创建一个简单的字幕效果 html marquee 标签是否已弃用 不 它首先必须成为语言的一部分才能被弃用 它只是专有的 如果是
  • 生成 macOS 框架时如何保留公共标头的目录布局

    我有一个 C 库的 CMake 项目 当前版本为 CMake v3 21 我正在将其移植到 macOS 并且我正在考虑将该库生成为操作系统框架 https developer apple com library archive docume
  • 如何使用 Automapper 映射复杂对象?

    我有几门课 public class Customer public string FirstName get set public string LastName get set public Product Product get se
  • 如何沿着时间线创建事件的可视化?

    我正在用 Python 构建可视化 我想在那里可视化加油站和我的汽车的燃油成本 此外 洗车及其成本以及维修都应该可视化 根据成本的不 同 燃料成本和洗衣成本应该有更高的标准 我创建了下面的可视化来描述这些概念 如何使用 matplotlib
  • 在 virtualenv 中找不到 Python 模块

    我无法让模块在我的虚拟环境中运行 以熊猫为例 随着虚拟环境的开启 我运行yolk l并返回 缩短版 basicpython xxxx LinuxBox pythonprojects basicpython yolk l Python 2 7
  • Pandas TypeError:无法转换为数字

    我正在开发一个项目 将数据从 SQL 导入到 pandas DataFrame 中 这似乎进行得很顺利 但是当我采取pandas mean 它抛出一个 TypeError 指出串联的值列表无法转换为数字 见下文 示例数据框 ProductS
  • POSIX 部分写入()

    如 SUSv4 或 POSIX 1 2008 中所述 http pubs opengroup org onlinepubs 9699919799 functions write html tag 16 685 08 http pubs op
  • C++ 使用类方法作为函数指针类型

    在 C 库中 有一个函数正在等待函数指针 这样 lasvm kcache t lasvm kcache create lasvm kernel t kernelfunc void closure 其中 lasvm kernel t 定义为
  • 除了 Tesseract 之外还存在哪些 OCR 选项? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 Tomcat 上运行的 servlet 进行文件 I/O

    我正在编写一个 Java servlet 使用 Tomcat 作为容器 它创建 PDF 文件并向最终用户提供服务 目前 PDF 文件是在内存中创建的 并作为对 POST 的响应写出 我想对此进行一些更改 以便将 PDF 文件写入磁盘 以便稍
  • Django 'pip install django-heroku'(psycopg2) 错误阻止部署到 Heroku

    我正在设置一个新的 Django 项目以在 Heroku 上部署 但是当我遵循 Django Heroku 部署指南时 我在 pip install django heroku 期间遇到错误 我正在运行 OS MacOS Mojave 10
  • 如果解决失败则重定向 Angular 2

    如果 Angular 2 中解析失败 如何重定向到另一个页面 我将此称为编辑页面的解析 但我想处理解析页面中的错误 我的决心 resolve route ActivatedRouteSnapshot Promise
  • 闪亮的反应功能没有按预期更新

    原始问题发布在这里 闪亮的反应性意外行为 https stackoverflow com questions 27478028 shiny reactive unexpected behavior该问题被重新发布在这里 试图改进之前在上面提