我创建了许多输入(参数)的Shiny应用程序 . 我们的用户希望返回相同的输入值 .
我已经检查了这个示例(http://shiny.rstudio.com/articles/client-data.html),它显示通过会话$ clientData $ url_search获取url,但是无法从左侧的sidebarPanel输入生成url . 例如:
http://localhost:8100/?obs=10
如何生成一个可以在Shiny中恢复相同值的URL?一个短的应该是最好的,因为有很多输入 .
如果我的问题不明确,请告诉我 .
谢谢你的任何建议 .
4 回答
为了简单起见,您不必在
server.R
中编写任何代码 . 通过编写一些javascript代码,可以很好地解析URL查询字符串(例如?obs=10
)并设置相应的输入 .下面我给出一个简单的例子,你可以看到如何动态设置Shiny的 any 内置输入控件的值 .
ui.R
server.R
www / js / parse_input.js
最后,您需要在Shiny项目目录下创建文件夹
www/js
,并将此parse_input.js
文件放在js
文件夹中 .然后,您可以使用
http://localhost:7691/?sex=Female&age=44&username=Jane
等网址访问该网站 .您应该在主面板上看到文本变为:
编辑:创建当前输入值的快照,将其保存到本地文件,然后使用快照ID将其还原
Bangyou提醒我,我的原始答案(上图)没有解决他的问题 . 以下是我的第二次回答这个问题的试验 .
ui.R
server.R
www / js / parse_input.js
一个简短的解释:
我们创建两个自定义输入和输出绑定:
一旦用户单击"Save"按钮,即触发输入绑定,该按钮将更改隐藏的
<input>
标记 . 这允许我们将输入的当前快照发送到服务器 .服务器使用 observer 来观看快照输入 . 然后它更新
user.saved.snapshots
变量,并将其保存到磁盘文件中 .我们还创建了自定义输出绑定 . 服务器将使用此输出绑定将用户输入的特定快照发送到客户端 . 如果查询字符串
?snapshot=[number]
可见,服务器将仅向客户端发送有效数据 .或者,您可以使用
input$inputs_snapshot
list对象创建显式恢复URL(例如?username=Eric&age=44&sex=Male
),因为您可以从那里访问所有输入值 . 我们的javascript也提供了这个功能 .有许多细节需要打磨 . 您可以考虑使用
RSQLite
包将这些配置文件保存到SQLite数据库 .但上面的演示应该是一个很好的概念证明 .
对于基于R的解决方案,将Shiny应用程序的小部件的当前状态编码为URL查询字符串,并从该URL恢复用户输入值,请参阅shinyURL包 . 它还具有方便的复制到剪贴板按钮,以及与TinyURL Web服务的接口,用于缩短URL .
该包装非常易于安装和使用 . 它可以从GitHub获得:
要在您的应用中启用shinyURL,请按以下3个步骤操作:
在 server.R 中的闪亮服务器函数内添加对
shinyURL.server(session)
的调用,其中session
是传递给服务器函数的参数 .将
shinyURL.ui()
小部件添加到 ui.R .根据@ xin-yin的建议,我添加了几行代码,以便在观察服务器中的函数时保存当前选项.R(基于https://gist.github.com/alexbbrown/6e77383b48a044191771中的想法) . 所有代码都粘贴在这里以防其他人需要它们 .
ui.R
server.R
WWW / JS / parse_input.js
Build daattali(Shiny saving URL state subpages and tabs),它可以接受任意数量的输入,并为几种不同类型的输入分配值:
ui.R:
server.R:
要测试的示例网址:127.0.0.1:5767 /?symbol = BBB,AAA,CCC,DDD&date_start = 2005-01-02&period_select = 2&ssLen = 153&usema = 1