我在renderPlot(shiny)
函数中定义了“时间”。但是,我得到了一个
错误:找不到对象“时间”。
我想知道为什么我会像我这样得到这个错误 已为“时间”变量
定义library(shiny)
library(survival)
library(survminer)
library(ggplot2)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
fileInput("file","File input"),
selectInput("Survival",
label = "Survival",
choices = c('time.day',
'time.year'),
selected = 'time.day'),
selectInput("Treatment",
"Treatment",
choices = c("trt"),
selected = "trt")
),
mainPanel(
plotOutput("KM")
)
)
)
server <- function(input, output) {
output$KM <- renderPlot({
req(input$file)
df <- read.csv(input$file$datapath)
df<- data.frame(df)
Time <- switch(input$Survival,
"time.day" = df$time.day,
"time.year" = df$time.yr)
x <- switch(input$Treatment,
"trt" = df$trt)
fit <- survfit(Surv(Time , cen) ~ x , data = df)
ggsurvplot(fit,risk.table = TRUE)
}
)
}
shinyApp(ui = ui, server = server)
输入数据通常是csv文件,如:
time.yr time.day cen trt
1.181940686 431.7038355 0 1
3.174982816 1159.662473 1 1
答案 0 :(得分:0)
这结果是一个棘手的问题。通常我们会建议一些非标准的评估来创建fit
,但似乎ggsurvplot
很挑剔,而且更容易创建所需的确切数据框:
library(shiny)
library(survival)
library(survminer)
library(ggplot2)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
fileInput("file","File input"),
selectInput("Survival",
label = "Survival",
choices = c('time.day',
'time.year'),
selected = 'time.day'),
selectInput("Treatment",
"Treatment",
choices = c("trt"),
selected = "trt")
),
mainPanel(
plotOutput("KM")
)
)
)
server <- function(input, output) {
raw_surv_data <- reactive({
req(input$file)
read.csv(input$file$datapath)
})
surv_data <- reactive({
raw_surv <- raw_surv_data()
data.frame(
Time = raw_surv[[input$Survival]],
x = raw_surv[[input$Treatment]],
cen = raw_surv[['cen']]
)
})
surv_fit <- reactive({
survfit(Surv(Time , cen) ~ x , data = surv_data())
})
output$KM <- renderPlot({
ggsurvplot(surv_fit(), risk.table = TRUE, data = surv_data())
})
}
shinyApp(ui = ui, server = server)