R 如何从自定义更新***输入函数设置Shiny::toJSON参数?
我正在开发一个闪亮的。我有一个R 如何从自定义更新***输入函数设置Shiny::toJSON参数?,r,shiny,inputbinding,R,Shiny,Inputbinding,我正在开发一个闪亮的。我有一个data.table,我正在传递给javascript。不幸的是,数据需要按行而不是按列进行编码private$inputMessageQueue没有额外的参数,因此没有地方覆盖默认参数。如何获得所需的格式 接收我的数据的闪亮函数。表(如消息$data) my数据中的实际数据。表: Browse[4]> str(message$data) Classes ‘data.table’ and 'data.frame': 8 obs. of 7 variable
data.table
,我正在传递给javascript。不幸的是,数据需要按行而不是按列进行编码private$inputMessageQueue
没有额外的参数,因此没有地方覆盖默认参数。如何获得所需的格式
接收我的数据的闪亮函数。表
(如消息$data
)
my数据中的实际数据。表
:
Browse[4]> str(message$data)
Classes ‘data.table’ and 'data.frame': 8 obs. of 7 variables:
$ coOrdinate : chr "c1" "c2" "c3" "c4" ...
$ injectionSite : Factor w/ 2 levels "head","body": NA NA NA NA NA NA NA NA
$ drug : Factor w/ 2 levels "aconitin","nicotine": NA NA NA NA NA NA NA NA
$ drugConcentration: num NA NA NA NA NA NA NA NA
$ bath : Factor w/ 2 levels "aconitin","nicotine": NA NA NA NA NA NA NA NA
$ bathConcentration: num NA NA NA NA NA NA NA NA
$ status : Factor w/ 3 levels "active","dead",..: 1 1 1 1 1 1 1 1
- attr(*, ".internal.selfref")=<externalptr>
Browse[4]> message$data
coOrdinate injectionSite drug drugConcentration bath bathConcentration status
1: c1 NA NA NA NA NA active
2: c2 NA NA NA NA NA active
3: c3 NA NA NA NA NA active
4: c4 NA NA NA NA NA active
5: c5 NA NA NA NA NA active
6: c6 NA NA NA NA NA active
7: c7 NA NA NA NA NA active
8: c8 NA NA NA NA NA active
我想做的是:
Browse[4]> jsonlite::toJSON(message$data)
[
{"coOrdinate":"c1","status":"active"},
{"coOrdinate":"c2","status":"active"},
{"coOrdinate":"c3","status":"active"},
{"coOrdinate":"c4","status":"active"},
{"coOrdinate":"c5","status":"active"},
{"coOrdinate":"c6","status":"active"},
{"coOrdinate":"c7","status":"active"},
{"coOrdinate":"c8","status":"active"}
]
处理私有$InputMessageQueue时,Shining会做什么(如中所示)
如果所有其他操作都失败,我可以将data.table转换为矩阵。这将为我提供行JSON,但我将丢失列名:
Browse[4]> jsonlite::toJSON(I(as.matrix(message$data)),dataframe='columns',null='null', na='null', auto_unbox=T, force=T, rownames=F, keep_vec_name=T)
[
["c1",null,null,null,null,null,"active"],
["c2",null,null,null,null,null,"active"],
["c3",null,null,null,null,null,"active"],
["c4",null,null,null,null,null,"active"],
["c5",null,null,null,null,null,"active"],
["c6",null,null,null,null,null,"active"],
["c7",null,null,null,null,null,"active"],
["c8",null,null,null,null,null,"active"]
]
那么,我如何强制Shiny按行传递data.frame呢?您只需使用
jsonlite::toJSON()
对R数据进行预编码,然后将编码后的JSON字符串传递给Shiny。它将被视为一个逐字的JSON字符串,而不是双重编码(例如,“[1,2]”
将不再被编码为“\”[1,2]\”
)。这是因为我们在jsonlite::toJSON()
()中使用了参数json\u verbatim=TRUE
。这需要shinny=0.12.0。哇,你真的深入挖掘了shinny的源代码:)太棒了!这让我头疼。
jsonlite::toJSON(I(message$data),dataframe='columns',null='null', na='null', auto_unbox=T, force=T, rownames=F, keep_vec_name=T)
{
"coOrdinate":["c1","c2","c3","c4","c5","c6","c7","c8"],
"injectionSite":[null,null,null,null,null,null,null,null],
"drug":[null,null,null,null,null,null,null,null],
"drugConcentration":[null,null,null,null,null,null,null,null],
"bath":[null,null,null,null,null,null,null,null],
"bathConcentration":[null,null,null,null,null,null,null,null],
"status":["active","active","active","active","active","active","active","active"]
}
Browse[4]> jsonlite::toJSON(I(as.matrix(message$data)),dataframe='columns',null='null', na='null', auto_unbox=T, force=T, rownames=F, keep_vec_name=T)
[
["c1",null,null,null,null,null,"active"],
["c2",null,null,null,null,null,"active"],
["c3",null,null,null,null,null,"active"],
["c4",null,null,null,null,null,"active"],
["c5",null,null,null,null,null,"active"],
["c6",null,null,null,null,null,"active"],
["c7",null,null,null,null,null,"active"],
["c8",null,null,null,null,null,"active"]
]