在運行下面的MWE代碼時呈現的4行表格中,我希望前2行的值不帶有小數,而后2行的值帶有小數到百分之一和%符號。如最下面的圖片所示,在第一次呼叫默認視圖的情況下。這種格式化將適用于首次呼叫應用程式時呈現的默認表格和修改它時(添加/洗掉行)。
是否有一種有效的方法來實作這一目標?如果可能的話,也許不需要添加函式(將其嵌入到下面的 MWE代碼: uj5u.com熱心網友回復: @Ronak的回答很好,但它改變了表格的值。我更愿意使用columnwise選項 uj5u.com熱心網友回復: 你可以用
標籤:output$table3 <- renderTable(...部分)?
library(shiny)
library(shinyMatrix)
library(magrittr)
#初始化的默認矩陣
matrix3DefaultRownames < - c("A",/span> "B"。 "C", "D")
matrix3Default <- data. frame('Series 1' = c(1。 24, 0。 100),行。 names = matrix3DefaultRownames) %>% as.matrix()
matrix3Input < - function(inputId, matrix3Default) {
matrixInput()
inputId = inputId,
label = "Input terms:"/span>,
值 = matrix3Default,
rows = list(extend = FALSE。 names = TRUE),
cols = list(extend = TRUE。 names = TRUE。 editableNames = FALSE。 洗掉= TRUE),
class = "numeric"/span>
)
}
ui < - fluidPage(titlePanel("Inputs"/span>)。 fluidRow(actionButton("modify"。 "modify")。 tableOutput("table3")))
服務器 < - function(input, 輸出,會話) {
rv <- reactiveValues()
mat3 = matrix3Input("matrix3"/span>, matrix3Default),
輸入 = matrix3Default,
colHeader = colnames(input)
)。
observeEvent(input$modify, {)
showModal(modalDialog(rv$mat3))
})
output$table3 <- renderTable()
{
if (isTruthy(input$modify)) {
req(input$matrix3)
df <- input$matrix3
rv$mat3 < - matrix3Input("matrix3", df)
colnames(df) < -粘貼("Series", 1: ncol(df))
rownames(df) <- matrix3DefaultRownames
rv$input <- df
} else {
df <- matrix3Default
colnames(df) < -粘貼("Series", 1: ncol(df))
rownames(df) <- matrix3DefaultRownames
}
df
},
rownames = TRUE,
colnames = TRUE
)
}
shinyApp(ui, server)。
render,它允許改變數值的display而不改變數值。
library(DT)
dat <- data.frame()
x = c()
1.2,
24.3,
0,
0.999
),
y = c()
12.8,
34.7,
0.1,
0.05>
)
)
js <- c()
"function(data, type, row, meta){"/span>,
" var rowindex = meta.row;",
" if(type =='display'){",
" if(rowindex <= 1){",
" return data.toFixed(0);",
" }else{",
" return (100*data).toFixed(2) '%'; ",
" }",
" }",
" return data;"/span>,
"}"
)
datatable()
dat,
options = list()
columnDefs = list()
list(targets = c(1。 2)。 渲染= JS(js))
)
)
)
sprintf執行這種格式化 -library(shiny)
library(shinyMatrix)
library(magrittr)
#初始化的默認矩陣
matrix3DefaultRownames < - c("A",/span> "B"。 "C", "D")
matrix3Default <- data. frame('Series 1' = c(1。 24, 0。 100),行。 names = matrix3DefaultRownames) %>% as.matrix()
matrix3Input < - function(inputId, matrix3Default) {
matrixInput()
inputId = inputId,
label = "Input terms:"/span>,
值 = matrix3Default,
rows = list(extend = FALSE。 names = TRUE),
cols = list(extend = TRUE。 names = TRUE。 editableNames = FALSE。 洗掉= TRUE),
class = "numeric"/span>
)
}
ui < - fluidPage(titlePanel("Inputs"/span>)。 fluidRow(actionButton("modify"。 "modify")。 tableOutput("table3")))
服務器 < - function(input, 輸出,會話) {
rv <- reactiveValues()
mat3 = matrix3Input("matrix3"/span>, matrix3Default),
輸入 = matrix3Default,
colHeader = colnames(input)
)。
observeEvent(input$modify, {)
showModal(modalDialog(rv$mat3))
})
output$table3 <- renderTable()
{
if (isTruthy(input$modify)) {
req(input$matrix3)
df <- input$matrix3
rv$mat3 < - matrix3Input("matrix3", df)
colnames(df) < -粘貼("Series", 1: ncol(df))
rownames(df) <- matrix3DefaultRownames
rv$input <- df
} else {
df <- matrix3Default
colnames(df) < -粘貼("Series", 1: ncol(df))
rownames(df) <- matrix3DefaultRownames
}
df[/span>3。 4] <- sprintf(/span>'%. 2f%%', df[3。 4])
#If you don't want to hard code 3rd and 4th row and select only last2 rows.
#n <- nrow(df)
#df[c(n-1, n)] <- sprintf('%.2f%', df[c(n-1, n)])
df
},
rownames = TRUE,
colnames = TRUE
)
}
shinyApp(ui, server)。



