我对R Shiny还是很陌生,而反应式数据集存在一些问题。
我的想法是,加载数据集,对其进行一些计算,然后打印结果。如果将数据集设置为
,这没有问题 df <- reactive({data.frame(mtcars)})
df_transformed <- reactive({data.frame(tapply(mt$hp, mt$cyl, mean),
names(tapply(mt$hp, mt$cyl, mean))))}
但是现在我无法以有意义的方式覆盖初始数据集。我在堆栈溢出中进行了一点搜索,只找到了两个问题之一的howTos,它们彼此排斥。
我想有这样的东西,但是可以工作:
server <- function(input, output) {
vals <- reactiveValues()
## Create a reactive value dataset
vals$mt <- data.frame(mtcars)
## Create a transformed set out of it
vals$mt_transformed <- data.frame(tapply(mt$hp, vals$mt$cyl, mean),
names(tapply(vals$mt$hp, vals$mt$cyl, mean)))
names(vals$mt_transformed) <- c("hp", "cyl")
## Transform the initial dataset, via deleting the last row
observeEvent(input$delete, {
vals$mt <- vals$mt[-nrow(vals$mt),]
})
## lets hope the plot changes everytime I delete a car
output$plot <- renderPlot({
ggplot(vals$mt_transformed) +
geom_bar(
aes(x = cyl, y = hp ),
stat = "identity"
)
})
#
}
为了完整性:
library(shiny)
library(ggplot2)
ui <- fluidPage(
actionButton(inputId = "delete", label = "destroy car"),
plotOutput("plot")
)
提前谢谢 马库斯
答案 0 :(得分:1)
让它自己工作。
server <- function(input, output) {
vals <- reactiveValues()
## Create a reactive value dataset
vals$mt <- data.frame(mtcars)
## Create a transformed set out of it
mt_transformed <- reactive({
df <- vals$mt
mt_transformed <- data.frame(tapply(df$hp, df$cyl, mean),
names(tapply(df$hp, df$cyl, mean)))
names(mt_transformed) <- c("hp", "cyl")
return( mt_transformed)
})
## Transform the initial dataset, via deleting the last row
observeEvent(input$delete, {
vals$mt <- vals$mt[-nrow(vals$mt),]
})
## lets hope the plot changes everytime I delete a car
output$plot <- renderPlot({
ggplot(mt_transformed()) +
geom_bar( aes(x = cyl, y = hp ), stat = "identity" )
})
}