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"]
]