- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个应用程序,该应用程序最终需要对数刻度上蛋白质浓度的平均值和标准差。由于几乎从未报告对数刻度值,因此我找到了一些引用文献,它们允许我使用常用数据(均值 + sd、中值 + 范围、中值 + IQR、5 点汇总等)来近似对数刻度。
用户将使用当前使用 rhandsontable 实现的表输入数据,直到我添加了足够的错误处理以容纳 CSV 文件,并且我想限制此表中显示的列,以免它变得不堪重负。我已经这样做了,从以下可重现的示例中可以看出。
library(shiny)
library(rhandsontable)
library(tidyverse)
make_DF <- function(n) {
DF <- data_frame(
entry = 1:n,
protein = NA_character_,
MW = NA_real_,
n = NA_integer_,
mean = NA_real_,
sd = NA_real_,
se = NA_real_,
min = NA_real_,
q1 = NA_real_,
median = NA_real_,
q3 = NA_real_,
max = NA_real_,
log_mean = NA_real_,
log_sd = NA_real_,
log_min = NA_real_,
log_q1 = NA_real_,
log_median = NA_real_,
log_q3 = NA_real_,
log_max = NA_real_,
units = factor("ng/mL", levels = c("pg/mL", "ng/mL", 'mcg/mL', 'mg/mL', 'g/mL')
)
)
DF[-1]
}
ui <- fluidPage(
tabPanel("Input",
column(4,
wellPanel(
checkboxGroupInput("data_format",
"The data consists of",
c("Mean and standard deviation" = "mean_sd",
"Mean and standard error" = "mean_se",
"Mean and standard deviation (log scale)" = "log_mean_sd",
"Mean and standard error (log scale)" = "log_mean_se",
"Median, min, and max" = "median_range",
"Median, Q1, and Q3" = 'median_iqr',
"Five point summary" = 'five_point'
# "Other combination" = 'other')
)
),
# p("Please note that selecting 'other' may result in invalid combinations."),
# titlePanel("Number of Entries"),
numericInput("n_entries",
"Number of Concentrations to estimate:",
value = 1,
min = 1),
actionButton("update_table", "Update Table")
)
),
column(8,
rHandsontableOutput("input_data") )
),
tabPanel("Output",
column(12,
tableOutput("test_output")
)
)
)
server <- function(input, output) {
# create or update the data frame by adding some rows
DF <- eventReactive(input$update_table, {
DF_new <- make_DF(input$n_entries)
# if a table does not already exist, this is our DF
if (input$update_table == 1) {
return(DF_new)
} else { # otherwise, we will append the new data frame to the old.
tmp_df <- hot_to_r(input$input_data)
return(rbind(tmp_df, DF_new))
}
})
# determine which variables to show based on user input
shown_variables <- eventReactive(input$update_table, {
unique(unlist(lapply(input$data_format, function(x) {
switch(x,
"mean_sd" = c('mean', 'sd'),
"mean_se" = c('mean', 'se'),
'log_mean_sd' = c("log_mean", 'log_sd'),
"log_mean_se" = c('log_mean', 'log_se'),
"median_range" = c('median','min', 'max'),
'median_IQR' = c("median", 'q1','q3'),
"five_point" = c('median', 'min', 'q1', 'q3', 'max'))
})))
})
# # finally, set up table for data entry
observeEvent(input$update_table, {
DF_shown <- DF()[c('protein', 'MW', 'n', shown_variables(), "units")]
output$test_output <- renderTable(DF())
output$input_data <- renderRHandsontable({rhandsontable(DF_shown)})
})
}
shinyApp(ui = ui, server = server)
rbind
使用
DF()
和新请求的行。这给了我错误:
# infinite loop error
server <- function(input, output) {
# create or update the data frame by adding some rows
DF <- eventReactive(input$update_table, {
DF_new <- make_DF(input$n_entries)
# if a table does not already exist, this is our DF
if (input$update_table == 1) {
return(DF_new)
} else { # otherwise, we will append the new data frame to the old.
tmp_df <- hot_to_r(input$input_data)
return(rbind(DF(), DF_new))
}
})
# determine which variables to show based on user input
shown_variables <- eventReactive(input$update_table, {
unique(unlist(lapply(input$data_format, function(x) {
switch(x,
"mean_sd" = c('mean', 'sd'),
"mean_se" = c('mean', 'se'),
'log_mean_sd' = c("log_mean", 'log_sd'),
"log_mean_se" = c('log_mean', 'log_se'),
"median_range" = c('median','min', 'max'),
'median_IQR' = c("median", 'q1','q3'),
"five_point" = c('median', 'min', 'q1', 'q3', 'max'))
})))
})
# # finally, set up table for data entry
observeEvent(input$update_table, {
DF_shown <- DF()[c('protein', 'MW', 'n', shown_variables(), "units")]
output$test_output <- renderTable(DF())
output$input_data <- renderRHandsontable({rhandsontable(DF_shown)})
})
}
最佳答案
感谢 Joe Cheng 和 Hao Wu 以及他们在 github ( https://github.com/rstudio/shiny/issues/2083 ) 上的回答,解决方案是使用 reactiveValues
函数来存储数据帧。据我了解他们的解释,问题的发生是因为(与传统数据框不同), react 数据框 DF()
永远不会完成计算。
这是基于他们的答案的有效解决方案:
library(shiny)
library(rhandsontable)
library(tidyverse)
make_DF <- function(n) {
DF <- data_frame(
entry = 1:n,
protein = NA_character_,
MW = NA_real_,
n = NA_integer_,
mean = NA_real_,
sd = NA_real_,
se = NA_real_,
min = NA_real_,
q1 = NA_real_,
median = NA_real_,
q3 = NA_real_,
max = NA_real_,
log_mean = NA_real_,
log_sd = NA_real_,
log_min = NA_real_,
log_q1 = NA_real_,
log_median = NA_real_,
log_q3 = NA_real_,
log_max = NA_real_,
units = factor("ng/mL", levels = c("pg/mL", "ng/mL", 'mcg/mL', 'mg/mL', 'g/mL')
)
)
DF[-1]
}
ui <- fluidPage(
tabPanel("Input",
column(4,
wellPanel(
checkboxGroupInput("data_format",
"The data consists of",
c("Mean and standard deviation" = "mean_sd",
"Mean and standard error" = "mean_se",
"Mean and standard deviation (log scale)" = "log_mean_sd",
"Mean and standard error (log scale)" = "log_mean_se",
"Median, min, and max" = "median_range",
"Median, Q1, and Q3" = 'median_iqr',
"Five point summary" = 'five_point'
# "Other combination" = 'other')
)
),
# p("Please note that selecting 'other' may result in invalid combinations."),
# titlePanel("Number of Entries"),
numericInput("n_entries",
"Number of Concentrations to estimate:",
value = 1,
min = 1),
actionButton("update_table", "Update Table")
)
),
column(8,
rHandsontableOutput("input_data") )
),
tabPanel("Output",
column(12,
tableOutput("test_output")
)
)
)
server <- function(input, output) {
# create or update the data frame by adding some rows
values <- reactiveValues()
observeEvent(input$update_table, {
# determine which variables to show based on user input
values$shown_variables <- unique(unlist(lapply(input$data_format, function(x) {
switch(x,
"mean_sd" = c('mean', 'sd'),
"mean_se" = c('mean', 'se'),
'log_mean_sd' = c("log_mean", 'log_sd'),
"log_mean_se" = c('log_mean', 'log_se'),
"median_range" = c('median','min', 'max'),
'median_IQR' = c("median", 'q1','q3'),
"five_point" = c('median', 'min', 'q1', 'q3', 'max'))
})))
# if a table does not already exist, this is our DF
if (input$update_table == 1) {
values$df <- make_DF(input$n_entries)
} else { # otherwise, append the new data frame to the old.
tmp_data <- hot_to_r(input$input_data)
values$df[,names(tmp_data)] <- tmp_data
values$df <- bind_rows(values$df, make_DF(input$n_entries))
}
# finally, set up table for data entry
DF_shown <- values$df[c('protein', 'MW', 'n', values$shown_variables, "units")]
output$test_output <- renderTable(values$df)
output$input_data <- renderRHandsontable({rhandsontable(DF_shown)})
})
}
shinyApp(ui = ui, server = server)
关于r - 在 Shiny 和 R 中动态添加行到 rhandsontable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50651618/
我在 R Shiny 中使用 rhandsontable 并且我想在第一列中使用“Sum”更改行的颜色。由于行数不固定,因此根据行号选择“Sum”行不起作用。我已经尝试了附加的代码,不幸的是它不起作用
数据... DF % hot_cols(colWidths = c(100, 50, 50), manualColumnMove = FALSE, ma
我正在使用 rhandsontable 包,并想添加一个上下文菜单选项,用于将多行添加到生成的 handsontable 中。我试着适应 this没有运气的例子进入我的 R 等价物。我相信我的 jav
假设我有以下 Shiny 的应用程序: library(shiny) library(rhandsontable) ui % hot_col("val", readOnly = TRUE)
我用 输出$hot % hot_cols(colWidths = ifelse(names(DF$DF) %in% DF$Select == T, 150, 0.1)) }) } sh
我正在努力根据单元格值在我 Shiny 的应用程序中为整行 rhandsontable 着色。 在下面的示例中,我想格式化整行而不是一个单元格。 library(rhandsontable) DF =
我正在尝试根据相邻逻辑列 ('Tick') 的选择在 rhandsontable 中收集列 ('Type') 的值。我想根据勾选的行创建所有类型的向量。 我将使用该向量对其他 rhandsontabl
我在 Shiny 应用程序中使用 rhandsontable,我想知道在这种情况下如何使用 Handsontable 的 getSelected() 方法,因为我打算在 data.frame 上应用更
我想根据值对整行应用颜色突出显示,并保留 rhandsontable 的复选框功能。在下面的简单示例中,我希望第 3 行为粉红色,第 4 行为绿色。 library(rhandsontable) DF
我在 Shiny 的应用程序中有一个 rhandsontable,它有 2 行。它使用 reactiveValues() 在其中加载值。 禁止通过拖动单元格来创建额外的行 fillHandle = l
我发现我可以对 rhandonstable 进行数字格式化,或者对 rhandsontable 的样式进行条件格式化,但不能同时进行这两种操作。使用下面的代码,似乎只使用了代码的 javascript
我正在尝试在 R shiny 中构建一个应用程序,我正在使用 handsontable 从用户那里获取输入。我的 handsontable 中的一列有下拉菜单,我需要从用户那里进行多项选择。 例如在我
我正在开发一个 Shiny 的应用程序,它从 SQL 数据库读取数据并将其呈现在 rhandsontable 中,并允许用户编辑数据。在将更改提交回数据库之前,我想添加一些功能: 如果 rhandso
当我尝试在 Shiny 应用程序中编辑 rhandsontable 的条目时,下拉菜单被缩短了。有没有办法让它们像 rhandsontable tutorial 中的日期选择器一样完全展开?这是应用程
我的 R 程序按预期工作。它显示了一个包含我的数据帧的表,并让我编辑这些值。 如何捕获这些值并将它们保存到我的数据帧或我的数据帧的副本? require(shiny) library(rhandson
我正在尝试创建一个 Shiny 的应用程序,其中包含一个 rhandsontable。如果选择/检查了另一列中的相应值,我希望 rhandsontable 能够更新其中一列中的值。到目前为止,我已经能
我正在尝试创建一个 Shiny 的应用程序,其中包含一个 rhandsontable。如果选择/检查了另一列中的相应值,我希望 rhandsontable 能够更新其中一列中的值。到目前为止,我已经能
我在 Shiny 的应用程序中有一个 rhandsontable。我的目标是根据列的总和为列中的所有单元格着色。示例:如果列中值的总和为 1,则此列中的所有单元格都显示为绿色。 向用户显示的预期结果是
在本文底部的简化代码中,我相信是 js 用于格式化使用 rhandsontable 呈现的表格的输出。我在代码的 js 部分尝试了行/列格式并取得了一些成功。但是,如下图所示,对于添加的所有列,我将如
在这个很好的问题中:Shiny: Switching reactive datasets with Rhandsontable and external parameters数据帧和 rhandson
我是一名优秀的程序员,十分优秀!