我有一个 Shiny Server 应用程序,用户可以在其中编辑数据表,然后相应地更新一些反应性摘要统计信息。我在一个相当慢的框架上托管这个应用程序,这就是为什么我想使用客户端处理进行 DT 渲染,即server = F
传递给DT::renderDataTable
. 让我分解我的问题的要点:
代码在server = T
通过时完全可操作。
当传递 时server = F
,当用户在 DT 中编辑单元格时,浏览器会抛出以下错误消息:
DataTables 警告:table id=DataTables_Table_5 - JSON 响应无效。有关此错误的更多信息,请参阅 http://datatables.net/tn/1
有趣的是,当这个错误窗口被关闭时,依赖摘要统计信息会根据编辑正确更新,并且 Shiny 应用程序继续。因此,除错误外,一切正常。我应该注意到,我访问了错误中提到的网站,但没有变得更聪明。
下面可重现的例子:
library(shiny)
library(DT)
dt = data.frame(V1 = c(1,2), V2 = c(3,4))
server <- function(input, output, session) {
val = reactiveValues(mat = data.table(dt))
output$testDT = renderDataTable({
DT::datatable(val$mat, editable = TRUE)
}, server = FALSE)
proxy = dataTableProxy('testDT')
observeEvent(input$testDT_cell_edit, {
info = input$testDT_cell_edit
str(info) …
Run Code Online (Sandbox Code Playgroud) 背景
我有一个远程服务器,通过 Plumber 在该服务器上运行 R API 服务。从我可以从外部调用我的服务的意义上来说,它是完全可操作的。
我正在使用 Ubuntu/Nginx 反向代理设置。Plumber 服务正在侦听端口 1163。我随后实现了以下 Nginx 重新路由,以便 API 侦听https://server.net/API/:
location /API/ {
proxy_pass http://localhost:1163/;
proxy_redirect http://localhost:1163/ $scheme://$host/;
}
Run Code Online (Sandbox Code Playgroud)
这工作正常。现在,默认情况下,Swagger UI 会监听
http://127.0.0.1:1163/__swagger__/
Run Code Online (Sandbox Code Playgroud)
由于上面的配置,这意味着我可以成功访问 Swagger UI
https://server.net/API/__swagger__/
Run Code Online (Sandbox Code Playgroud)
问题
我想配置 Nginx 以便 Swagger UI 监听https://server.net/API/documentation/。我尝试了以下嵌套 Nginx 配置:
location /API/ {
proxy_pass http://localhost:1163/;
proxy_redirect http://localhost:1163/ $scheme://$host/;
location /API/documentation/ {
proxy_pass http://localhost:1163/__swagger__/;
proxy_redirect http://localhost:1163/__swagger__/ $scheme://$host/;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在浏览器中输入所需的 URL https://server.net/API/documentation/时,我检索 Swagger 界面,但它返回以下错误代码:
显然,Nginx 重定向期间解析了错误的 swagger URL。考虑到 url 应该说明这一点,这一点很清楚
https://server.net/API/swagger.json?schemes=https&host=server.net&path=/API/
Run Code Online (Sandbox Code Playgroud)
代替
http://petstore.swagger.io/v2/swagger.json
Run Code Online (Sandbox Code Playgroud)
如何确保在 …
我有data.table
以下示例结构:
dt = data.table(
V1 = c('One', 'Two', 'Three'),
V2 = c('Red', NA, NA),
V3 = c('Cat', NA, 'Dogs')
)
> dt
V1 V2 V3
1: One Red Cat
2: Two <NA> <NA>
3: Three <NA> Dogs
Run Code Online (Sandbox Code Playgroud)
我想将元素按行串联到一个新列中,该列省略NA
:
> dt
V1 V2 V3 V4
1: One Red Cat One Red Cat
2: Two <NA> <NA> Two
3: Three <NA> Dogs Three Dogs
Run Code Online (Sandbox Code Playgroud)
在这个简单的示例中,我当然可以转置对象并执行lapply(.SD, paste(x[!is.na(x)]))
,但是转置的计算成本太高。我也不想在第二步中删除NAs
那些被强迫的内容。character
简而言之,我欢迎任何高性能解决方案。