#r #shiny #r-caret #caret #glmnet
Вопрос:
Я пытаюсь создать приложение R Shiny, которое вычисляет оценку с помощью регрессии хребта, а затем использует ее в модели случайного леса. Я сохранил обе модели как RDS и сохранил их в той же папке, где находится app.R.
Затем я читаю модели и данные прогнозируемых вероятностей и определяю некоторые функции:
# Reading data
phats <- read.csv("Predicted_probabilities_training.csv")
phats_graph <- phats %>% mutate(`PTD Event Status` = ifelse(Observed_Event=="PTD", "PTD Event", "No PTD Event"))
phats_event <- phats[phats$Observed_Event=="PTD",]
phats_nonevent <- phats[phats$Observed_Event=="No_PTD",]
# load the models
ridge_model <- readRDS("ridge_model.rds")
final_model <- readRDS("final_model.rds")
# Defining some functions
matrix.for.ILS.function <- function(input){
return(data.matrix(data.frame(input$MIP_1a,
input$MIP_3a,
input$RANTES,
input$sIL_6R,
input$ITAC,
input$IL_21,
input$Fractalkine,
input$TNF_a,
input$IL_1b,
input$IL_7,
input$IL_10,
input$GM_CSF,
input$MIP_1b)))
}
ILS.function <- function(input){
ILS.ridge = as.numeric(predict(ridge_model, matrix.for.ILS.function(input), s = 0.7414409, type="link"))
return(ILS.ridge)
}
test.data.function <- function(input){
test.data = data.frame(Age=input$Age,
Gender=input$Gender,
GCS_Bestin24=input$GCS_Bestin24,
Premorbid_depression=input$Premorbid_depression,
Antidep_first6m=input$Antidep_first6m)
return(cbind(test.data, ILS.ridge=ILS.function(input)))
}
pred_prob_func <- function(input){
pred_prob = predict(final_model, test.data.function(input), type="prob")[,"PTD"]
classification <- ifelse(pred_prob >= input$thresholdslider, "PTD Event", "No Event")
return(list(pred_prob=pred_prob, classification=classification))
}
Затем, после написания пользовательского интерфейса и серверных кодов, я пытаюсь создать график, но он показывает мне ошибку: «аргументы подразумевают разное количество строк: 0, 1». Я проверил, что pred_prob_func
приводит к этой ошибке. Хотя, когда я попытался создать список input
, вызванный простым созданием списка случайных значений для переменных, и попытался посмотреть, pred_prob_func(input)
создает ли он значение, оно на самом деле создает значение. Но когда я пытаюсь запустить приложение, график не отображается и выдает мне эту ошибку. Я использую следующие коды в разделе сервера для создания графика.
output$int_plot <- renderPlotly({ phats_graph #r #shiny #r-caret #caret #glmnet
Вопрос:
Я пытаюсь создать приложение R Shiny, которое вычисляет оценку с помощью регрессии хребта, а затем использует ее в модели случайного леса. Я сохранил обе модели как RDS и сохранил их в той же папке, где находится app.R. Затем я читаю модели и данные прогнозируемых вероятностей и определяю некоторые функции:
# Reading data phats <- read.csv("Predicted_probabilities_training.csv") phats_graph <- phats %>% mutate(`PTD Event Status` = ifelse(Observed_Event=="PTD", "PTD Event", "No PTD Event")) phats_event <- phats[phats$Observed_Event=="PTD",] phats_nonevent <- phats[phats$Observed_Event=="No_PTD",] # load the models ridge_model <- readRDS("ridge_model.rds") final_model <- readRDS("final_model.rds") # Defining some functions matrix.for.ILS.function <- function(input){ return(data.matrix(data.frame(input$MIP_1a, input$MIP_3a, input$RANTES, input$sIL_6R, input$ITAC, input$IL_21, input$Fractalkine, input$TNF_a, input$IL_1b, input$IL_7, input$IL_10, input$GM_CSF, input$MIP_1b))) } ILS.function <- function(input){ ILS.ridge = as.numeric(predict(ridge_model, matrix.for.ILS.function(input), s = 0.7414409, type="link")) return(ILS.ridge) } test.data.function <- function(input){ test.data = data.frame(Age=input$Age, Gender=input$Gender, GCS_Bestin24=input$GCS_Bestin24, Premorbid_depression=input$Premorbid_depression, Antidep_first6m=input$Antidep_first6m) return(cbind(test.data, ILS.ridge=ILS.function(input))) } pred_prob_func <- function(input){ pred_prob = predict(final_model, test.data.function(input), type="prob")[,"PTD"] classification <- ifelse(pred_prob >= input$thresholdslider, "PTD Event", "No Event") return(list(pred_prob=pred_prob, classification=classification)) }
Затем, после написания пользовательского интерфейса и серверных кодов, я пытаюсь создать график, но он показывает мне ошибку: "аргументы подразумевают разное количество строк: 0, 1". Я проверил, что
pred_prob_func
приводит к этой ошибке. Хотя, когда я попытался создать списокinput
, вызванный простым созданием списка случайных значений для переменных, и попытался посмотреть,pred_prob_func(input)
создает ли он значение, оно на самом деле создает значение. Но когда я пытаюсь запустить приложение, график не отображается и выдает мне эту ошибку. Я использую следующие коды в разделе сервера для создания графика.Total Percentile` <- unlist(t(sapply(phats_graph$Phat, function(x) quantile_fun(value=x)))[,1])
phats_graph#r #shiny #r-caret #caret #glmnet
Вопрос:
Я пытаюсь создать приложение R Shiny, которое вычисляет оценку с помощью регрессии хребта, а затем использует ее в модели случайного леса. Я сохранил обе модели как RDS и сохранил их в той же папке, где находится app.R.
Затем я читаю модели и данные прогнозируемых вероятностей и определяю некоторые функции:
# Reading data phats <- read.csv("Predicted_probabilities_training.csv") phats_graph <- phats %>% mutate(`PTD Event Status` = ifelse(Observed_Event=="PTD", "PTD Event", "No PTD Event")) phats_event <- phats[phats$Observed_Event=="PTD",] phats_nonevent <- phats[phats$Observed_Event=="No_PTD",] # load the models ridge_model <- readRDS("ridge_model.rds") final_model <- readRDS("final_model.rds") # Defining some functions matrix.for.ILS.function <- function(input){ return(data.matrix(data.frame(input$MIP_1a, input$MIP_3a, input$RANTES, input$sIL_6R, input$ITAC, input$IL_21, input$Fractalkine, input$TNF_a, input$IL_1b, input$IL_7, input$IL_10, input$GM_CSF, input$MIP_1b))) } ILS.function <- function(input){ ILS.ridge = as.numeric(predict(ridge_model, matrix.for.ILS.function(input), s = 0.7414409, type="link")) return(ILS.ridge) } test.data.function <- function(input){ test.data = data.frame(Age=input$Age, Gender=input$Gender, GCS_Bestin24=input$GCS_Bestin24, Premorbid_depression=input$Premorbid_depression, Antidep_first6m=input$Antidep_first6m) return(cbind(test.data, ILS.ridge=ILS.function(input))) } pred_prob_func <- function(input){ pred_prob = predict(final_model, test.data.function(input), type="prob")[,"PTD"] classification <- ifelse(pred_prob >= input$thresholdslider, "PTD Event", "No Event") return(list(pred_prob=pred_prob, classification=classification)) }
Затем, после написания пользовательского интерфейса и серверных кодов, я пытаюсь создать график, но он показывает мне ошибку: "аргументы подразумевают разное количество строк: 0, 1". Я проверил, что
pred_prob_func
приводит к этой ошибке. Хотя, когда я попытался создать списокinput
, вызванный простым созданием списка случайных значений для переменных, и попытался посмотреть,pred_prob_func(input)
создает ли он значение, оно на самом деле создает значение. Но когда я пытаюсь запустить приложение, график не отображается и выдает мне эту ошибку. Я использую следующие коды в разделе сервера для создания графика.PTD Percentile` <- unlist(t(sapply(phats_graph$Phat, function(x) quantile_fun(value=x)))[,2])
phats_graph#r #shiny #r-caret #caret #glmnet
Вопрос:
Я пытаюсь создать приложение R Shiny, которое вычисляет оценку с помощью регрессии хребта, а затем использует ее в модели случайного леса. Я сохранил обе модели как RDS и сохранил их в той же папке, где находится app.R.
Затем я читаю модели и данные прогнозируемых вероятностей и определяю некоторые функции:
# Reading data phats <- read.csv("Predicted_probabilities_training.csv") phats_graph <- phats %>% mutate(`PTD Event Status` = ifelse(Observed_Event=="PTD", "PTD Event", "No PTD Event")) phats_event <- phats[phats$Observed_Event=="PTD",] phats_nonevent <- phats[phats$Observed_Event=="No_PTD",] # load the models ridge_model <- readRDS("ridge_model.rds") final_model <- readRDS("final_model.rds") # Defining some functions matrix.for.ILS.function <- function(input){ return(data.matrix(data.frame(input$MIP_1a, input$MIP_3a, input$RANTES, input$sIL_6R, input$ITAC, input$IL_21, input$Fractalkine, input$TNF_a, input$IL_1b, input$IL_7, input$IL_10, input$GM_CSF, input$MIP_1b))) } ILS.function <- function(input){ ILS.ridge = as.numeric(predict(ridge_model, matrix.for.ILS.function(input), s = 0.7414409, type="link")) return(ILS.ridge) } test.data.function <- function(input){ test.data = data.frame(Age=input$Age, Gender=input$Gender, GCS_Bestin24=input$GCS_Bestin24, Premorbid_depression=input$Premorbid_depression, Antidep_first6m=input$Antidep_first6m) return(cbind(test.data, ILS.ridge=ILS.function(input))) } pred_prob_func <- function(input){ pred_prob = predict(final_model, test.data.function(input), type="prob")[,"PTD"] classification <- ifelse(pred_prob >= input$thresholdslider, "PTD Event", "No Event") return(list(pred_prob=pred_prob, classification=classification)) }
Затем, после написания пользовательского интерфейса и серверных кодов, я пытаюсь создать график, но он показывает мне ошибку: "аргументы подразумевают разное количество строк: 0, 1". Я проверил, что
pred_prob_func
приводит к этой ошибке. Хотя, когда я попытался создать списокinput
, вызванный простым созданием списка случайных значений для переменных, и попытался посмотреть,pred_prob_func(input)
создает ли он значение, оно на самом деле создает значение. Но когда я пытаюсь запустить приложение, график не отображается и выдает мне эту ошибку. Я использую следующие коды в разделе сервера для создания графика.No PTD Percentile` <- unlist(t(sapply(phats_graph$Phat, function(x) quantile_fun(value=x)))[,3])
int_plot <- ggplot(phats_graph, aes(ptd_per=`No PTD Percentile`)) geom_density(aes(x=Phat, fill = `PTD Event Status`), alpha=0.5)
geom_vline(xintercept = input$thresholdslider, linetype = 'dashed')
geom_vline(xintercept = pred_prob_func(input)$pred_prob)
xlab('Threshold Percentage') ylab('Density')
theme_minimal() scale_fill_manual(values=c("#5D3A9B", "#E66100"), name="")ggplotly(int_plot, tooltip=c("x", "ptd_per"))
})
Есть ли проблема с тем, как я определяю функции?
Правки:
Все файлы (данные, модели RDS) и приложение можно найти на этом диске Google для тестирования.
Я протестировал функции, используя следующие примеры входных данных (которые дали результаты, когда я использовал это в качестве аргумента в функциях, но показывает эту ошибку при попытке запустить приложение).:
input=list(Age=20, Gender=1, GCS_Bestin24=4, Premorbid_depression=0, Antidep_first6m=0, MIP_1a=1, MIP_3a=1, RANTES=1, sIL_6R=1, ITAC=1, IL_21=1, Fractalkine=1, TNF_a=1, IL_1b=1, IL_7=1, IL_10=1, GM_CSF=1, MIP_1b=1, thresholdslider=0.5)
Комментарии:
1. Дайте мне знать, если я смогу дать больше информации, и я смогу отредактировать вопрос.
2. Вы пытались определить, где именно происходят ошибки ? Я думаю, что это может быть в
cbind
функции intest.data.function
. Вы должны добавить немногоprint(input$Age)
и т. Д… в этой функции, чтобы убедиться, что ваши входные данные действительно имеют значения.3. @gdevaux Я протестировал функции, используя входные данные, которые теперь есть в моих правках.
Ответ №1:
Первоначальная ошибка возникает из-за того, что вы не запрашиваете то input$id
же самое id
, что вы назначаете textInput
.
textInput("MIPa", label = HTML("MIP-1\(\alpha\)") ##used in ui
input$MIP_1a ##used in server.
Я думаю, что есть проблема с использованием input
переменной shiny.
Создав список входных данных как input_list
и изменив места, в которые вы input
сами input()
звоните, кажется, что это работает.
Мне также нужно было удалить test.data.function(input)
сразу после test.data.function()
создания функции, чтобы запустить приложение.
input_list <- reactive({
input_list <- list( Age=as.numeric(input$Age),
Gender=ifelse(input$Gender == "Female", 1, 0),
GCS_Bestin24=as.numeric(input$GCS_Bestin24),
Premorbid_depression=as.numeric(input$Premorbid_depression),
Antidep_first6m=as.numeric(input$Antidep_first6m),
MIP_1a = as.numeric(input$MIPa),
MIP_3a = as.numeric(input$MIP_3a),
RANTES = as.numeric(input$RANTES),
sIL_6R = as.numeric(input$sIL_6R),
ITAC = as.numeric(input$ITAC),
IL_21 = as.numeric(input$IL_21),
Fractalkine = as.numeric(input$Fractalkine),
TNF_a = as.numeric(input$TNF_a),
IL_1b = as.numeric(input$ILb),
IL_7 = as.numeric(input$IL_7),
IL_10 = as.numeric(input$IL0),
GM_CSF = as.numeric(input$GM_CSF),
MIP_1b = as.numeric(input$MIPb))
input_list
})
##input changed to input_list()
##this needs to be done for each instance where input is used on its own.
geom_vline(xintercept = pred_prob_func(input_list())$pred_prob)
Чтобы удалить окончательное сообщение об ошибке, вам необходимо изменить значение renderPlotly()
на renderUI()
и включить проверку NA
значений в input_list
.
plotlyOutput
Также необходимо изменить значение uiOutput()
в ui
разделе.
ui <- fluidPage( uiOutput('int_plot') #changed from plotlyOutput('int_plot') ) server <- ( output$int_plot <- renderUI({ if(anyNA(input_list())){ helpText("Input User data") }else{ phats_graph #r #shiny #r-caret #caret #glmnet
Вопрос:
Я пытаюсь создать приложение R Shiny, которое вычисляет оценку с помощью регрессии хребта, а затем использует ее в модели случайного леса. Я сохранил обе модели как RDS и сохранил их в той же папке, где находится app.R. Затем я читаю модели и данные прогнозируемых вероятностей и определяю некоторые функции:# Reading data phats <- read.csv("Predicted_probabilities_training.csv") phats_graph <- phats %>% mutate(`PTD Event Status` = ifelse(Observed_Event=="PTD", "PTD Event", "No PTD Event")) phats_event <- phats[phats$Observed_Event=="PTD",] phats_nonevent <- phats[phats$Observed_Event=="No_PTD",] # load the models ridge_model <- readRDS("ridge_model.rds") final_model <- readRDS("final_model.rds") # Defining some functions matrix.for.ILS.function <- function(input){ return(data.matrix(data.frame(input$MIP_1a, input$MIP_3a, input$RANTES, input$sIL_6R, input$ITAC, input$IL_21, input$Fractalkine, input$TNF_a, input$IL_1b, input$IL_7, input$IL_10, input$GM_CSF, input$MIP_1b))) } ILS.function <- function(input){ ILS.ridge = as.numeric(predict(ridge_model, matrix.for.ILS.function(input), s = 0.7414409, type="link")) return(ILS.ridge) } test.data.function <- function(input){ test.data = data.frame(Age=input$Age, Gender=input$Gender, GCS_Bestin24=input$GCS_Bestin24, Premorbid_depression=input$Premorbid_depression, Antidep_first6m=input$Antidep_first6m) return(cbind(test.data, ILS.ridge=ILS.function(input))) } pred_prob_func <- function(input){ pred_prob = predict(final_model, test.data.function(input), type="prob")[,"PTD"] classification <- ifelse(pred_prob >= input$thresholdslider, "PTD Event", "No Event") return(list(pred_prob=pred_prob, classification=classification)) }
Затем, после написания пользовательского интерфейса и серверных кодов, я пытаюсь создать график, но он показывает мне ошибку: "аргументы подразумевают разное количество строк: 0, 1". Я проверил, что
pred_prob_func
приводит к этой ошибке. Хотя, когда я попытался создать списокinput
, вызванный простым созданием списка случайных значений для переменных, и попытался посмотреть,pred_prob_func(input)
создает ли он значение, оно на самом деле создает значение. Но когда я пытаюсь запустить приложение, график не отображается и выдает мне эту ошибку. Я использую следующие коды в разделе сервера для создания графика.output$int_plot <- renderPlotly({ phats_graph #r #shiny #r-caret #caret #glmnet
Вопрос:
Я пытаюсь создать приложение R Shiny, которое вычисляет оценку с помощью регрессии хребта, а затем использует ее в модели случайного леса. Я сохранил обе модели как RDS и сохранил их в той же папке, где находится app.R. Затем я читаю модели и данные прогнозируемых вероятностей и определяю некоторые функции:
# Reading data phats <- read.csv("Predicted_probabilities_training.csv") phats_graph <- phats %>% mutate(`PTD Event Status` = ifelse(Observed_Event=="PTD", "PTD Event", "No PTD Event")) phats_event <- phats[phats$Observed_Event=="PTD",] phats_nonevent <- phats[phats$Observed_Event=="No_PTD",] # load the models ridge_model <- readRDS("ridge_model.rds") final_model <- readRDS("final_model.rds") # Defining some functions matrix.for.ILS.function <- function(input){ return(data.matrix(data.frame(input$MIP_1a, input$MIP_3a, input$RANTES, input$sIL_6R, input$ITAC, input$IL_21, input$Fractalkine, input$TNF_a, input$IL_1b, input$IL_7, input$IL_10, input$GM_CSF, input$MIP_1b))) } ILS.function <- function(input){ ILS.ridge = as.numeric(predict(ridge_model, matrix.for.ILS.function(input), s = 0.7414409, type="link")) return(ILS.ridge) } test.data.function <- function(input){ test.data = data.frame(Age=input$Age, Gender=input$Gender, GCS_Bestin24=input$GCS_Bestin24, Premorbid_depression=input$Premorbid_depression, Antidep_first6m=input$Antidep_first6m) return(cbind(test.data, ILS.ridge=ILS.function(input))) } pred_prob_func <- function(input){ pred_prob = predict(final_model, test.data.function(input), type="prob")[,"PTD"] classification <- ifelse(pred_prob >= input$thresholdslider, "PTD Event", "No Event") return(list(pred_prob=pred_prob, classification=classification)) }
Затем, после написания пользовательского интерфейса и серверных кодов, я пытаюсь создать график, но он показывает мне ошибку: "аргументы подразумевают разное количество строк: 0, 1". Я проверил, что
pred_prob_func
приводит к этой ошибке. Хотя, когда я попытался создать списокinput
, вызванный простым созданием списка случайных значений для переменных, и попытался посмотреть,pred_prob_func(input)
создает ли он значение, оно на самом деле создает значение. Но когда я пытаюсь запустить приложение, график не отображается и выдает мне эту ошибку. Я использую следующие коды в разделе сервера для создания графика.Total Percentile` <- unlist(t(sapply(phats_graph$Phat, function(x) quantile_fun(value=x)))[,1])
phats_graph#r #shiny #r-caret #caret #glmnet
Вопрос:
Я пытаюсь создать приложение R Shiny, которое вычисляет оценку с помощью регрессии хребта, а затем использует ее в модели случайного леса. Я сохранил обе модели как RDS и сохранил их в той же папке, где находится app.R.
Затем я читаю модели и данные прогнозируемых вероятностей и определяю некоторые функции:
# Reading data phats <- read.csv("Predicted_probabilities_training.csv") phats_graph <- phats %>% mutate(`PTD Event Status` = ifelse(Observed_Event=="PTD", "PTD Event", "No PTD Event")) phats_event <- phats[phats$Observed_Event=="PTD",] phats_nonevent <- phats[phats$Observed_Event=="No_PTD",] # load the models ridge_model <- readRDS("ridge_model.rds") final_model <- readRDS("final_model.rds") # Defining some functions matrix.for.ILS.function <- function(input){ return(data.matrix(data.frame(input$MIP_1a, input$MIP_3a, input$RANTES, input$sIL_6R, input$ITAC, input$IL_21, input$Fractalkine, input$TNF_a, input$IL_1b, input$IL_7, input$IL_10, input$GM_CSF, input$MIP_1b))) } ILS.function <- function(input){ ILS.ridge = as.numeric(predict(ridge_model, matrix.for.ILS.function(input), s = 0.7414409, type="link")) return(ILS.ridge) } test.data.function <- function(input){ test.data = data.frame(Age=input$Age, Gender=input$Gender, GCS_Bestin24=input$GCS_Bestin24, Premorbid_depression=input$Premorbid_depression, Antidep_first6m=input$Antidep_first6m) return(cbind(test.data, ILS.ridge=ILS.function(input))) } pred_prob_func <- function(input){ pred_prob = predict(final_model, test.data.function(input), type="prob")[,"PTD"] classification <- ifelse(pred_prob >= input$thresholdslider, "PTD Event", "No Event") return(list(pred_prob=pred_prob, classification=classification)) }
Затем, после написания пользовательского интерфейса и серверных кодов, я пытаюсь создать график, но он показывает мне ошибку: "аргументы подразумевают разное количество строк: 0, 1". Я проверил, что
pred_prob_func
приводит к этой ошибке. Хотя, когда я попытался создать списокinput
, вызванный простым созданием списка случайных значений для переменных, и попытался посмотреть,pred_prob_func(input)
создает ли он значение, оно на самом деле создает значение. Но когда я пытаюсь запустить приложение, график не отображается и выдает мне эту ошибку. Я использую следующие коды в разделе сервера для создания графика.PTD Percentile` <- unlist(t(sapply(phats_graph$Phat, function(x) quantile_fun(value=x)))[,2])
phats_graph#r #shiny #r-caret #caret #glmnet
Вопрос:
Я пытаюсь создать приложение R Shiny, которое вычисляет оценку с помощью регрессии хребта, а затем использует ее в модели случайного леса. Я сохранил обе модели как RDS и сохранил их в той же папке, где находится app.R.
Затем я читаю модели и данные прогнозируемых вероятностей и определяю некоторые функции:
# Reading data phats <- read.csv("Predicted_probabilities_training.csv") phats_graph <- phats %>% mutate(`PTD Event Status` = ifelse(Observed_Event=="PTD", "PTD Event", "No PTD Event")) phats_event <- phats[phats$Observed_Event=="PTD",] phats_nonevent <- phats[phats$Observed_Event=="No_PTD",] # load the models ridge_model <- readRDS("ridge_model.rds") final_model <- readRDS("final_model.rds") # Defining some functions matrix.for.ILS.function <- function(input){ return(data.matrix(data.frame(input$MIP_1a, input$MIP_3a, input$RANTES, input$sIL_6R, input$ITAC, input$IL_21, input$Fractalkine, input$TNF_a, input$IL_1b, input$IL_7, input$IL_10, input$GM_CSF, input$MIP_1b))) } ILS.function <- function(input){ ILS.ridge = as.numeric(predict(ridge_model, matrix.for.ILS.function(input), s = 0.7414409, type="link")) return(ILS.ridge) } test.data.function <- function(input){ test.data = data.frame(Age=input$Age, Gender=input$Gender, GCS_Bestin24=input$GCS_Bestin24, Premorbid_depression=input$Premorbid_depression, Antidep_first6m=input$Antidep_first6m) return(cbind(test.data, ILS.ridge=ILS.function(input))) } pred_prob_func <- function(input){ pred_prob = predict(final_model, test.data.function(input), type="prob")[,"PTD"] classification <- ifelse(pred_prob >= input$thresholdslider, "PTD Event", "No Event") return(list(pred_prob=pred_prob, classification=classification)) }
Затем, после написания пользовательского интерфейса и серверных кодов, я пытаюсь создать график, но он показывает мне ошибку: "аргументы подразумевают разное количество строк: 0, 1". Я проверил, что
pred_prob_func
приводит к этой ошибке. Хотя, когда я попытался создать списокinput
, вызванный простым созданием списка случайных значений для переменных, и попытался посмотреть,pred_prob_func(input)
создает ли он значение, оно на самом деле создает значение. Но когда я пытаюсь запустить приложение, график не отображается и выдает мне эту ошибку. Я использую следующие коды в разделе сервера для создания графика.No PTD Percentile` <- unlist(t(sapply(phats_graph$Phat, function(x) quantile_fun(value=x)))[,3])
int_plot <- ggplot(phats_graph, aes(ptd_per=`No PTD Percentile`)) geom_density(aes(x=Phat, fill = `PTD Event Status`), alpha=0.5)
geom_vline(xintercept = input$thresholdslider, linetype = 'dashed')
geom_vline(xintercept = pred_prob_func(input)$pred_prob)
xlab('Threshold Percentage') ylab('Density')
theme_minimal() scale_fill_manual(values=c("#5D3A9B", "#E66100"), name="")ggplotly(int_plot, tooltip=c("x", "ptd_per"))
})
Есть ли проблема с тем, как я определяю функции?
Правки:
Все файлы (данные, модели RDS) и приложение можно найти на этом диске Google для тестирования.
Я протестировал функции, используя следующие примеры входных данных (которые дали результаты, когда я использовал это в качестве аргумента в функциях, но показывает эту ошибку при попытке запустить приложение).:
input=list(Age=20, Gender=1, GCS_Bestin24=4, Premorbid_depression=0, Antidep_first6m=0, MIP_1a=1, MIP_3a=1, RANTES=1, sIL_6R=1, ITAC=1, IL_21=1, Fractalkine=1, TNF_a=1, IL_1b=1, IL_7=1, IL_10=1, GM_CSF=1, MIP_1b=1, thresholdslider=0.5)
Комментарии:
1. Дайте мне знать, если я смогу дать больше информации, и я смогу отредактировать вопрос.
2. Вы пытались определить, где именно происходят ошибки ? Я думаю, что это может быть в
cbind
функции intest.data.function
. Вы должны добавить немногоprint(input$Age)
и т. Д... в этой функции, чтобы убедиться, что ваши входные данные действительно имеют значения.3. @gdevaux Я протестировал функции, используя входные данные, которые теперь есть в моих правках.
Ответ №1:
Первоначальная ошибка возникает из-за того, что вы не запрашиваете то
input$id
же самоеid
, что вы назначаетеtextInput
.textInput("MIPa", label = HTML("MIP-1\(\alpha\)") ##used in ui input$MIP_1a ##used in server.
Я думаю, что есть проблема с использованием
input
переменной shiny.Создав список входных данных как
input_list
и изменив места, в которые выinput
самиinput()
звоните, кажется, что это работает.Мне также нужно было удалить
test.data.function(input)
сразу послеtest.data.function()
создания функции, чтобы запустить приложение.input_list <- reactive({ input_list <- list( Age=as.numeric(input$Age), Gender=ifelse(input$Gender == "Female", 1, 0), GCS_Bestin24=as.numeric(input$GCS_Bestin24), Premorbid_depression=as.numeric(input$Premorbid_depression), Antidep_first6m=as.numeric(input$Antidep_first6m), MIP_1a = as.numeric(input$MIPa), MIP_3a = as.numeric(input$MIP_3a), RANTES = as.numeric(input$RANTES), sIL_6R = as.numeric(input$sIL_6R), ITAC = as.numeric(input$ITAC), IL_21 = as.numeric(input$IL_21), Fractalkine = as.numeric(input$Fractalkine), TNF_a = as.numeric(input$TNF_a), IL_1b = as.numeric(input$ILb), IL_7 = as.numeric(input$IL_7), IL_10 = as.numeric(input$IL0), GM_CSF = as.numeric(input$GM_CSF), MIP_1b = as.numeric(input$MIPb)) input_list })
##input changed to input_list() ##this needs to be done for each instance where input is used on its own. geom_vline(xintercept = pred_prob_func(input_list())$pred_prob)
Чтобы удалить окончательное сообщение об ошибке, вам необходимо изменить значение
renderPlotly()
наrenderUI()
и включить проверкуNA
значений вinput_list
.
plotlyOutput
Также необходимо изменить значениеuiOutput()
вui
разделе.Total Percentile` <- unlist(t(sapply(phats_graph$Phat, function(x) quantile_fun(value=x)))[,1])
phats_graph#r #shiny #r-caret #caret #glmnet
Вопрос:
Я пытаюсь создать приложение R Shiny, которое вычисляет оценку с помощью регрессии хребта, а затем использует ее в модели случайного леса. Я сохранил обе модели как RDS и сохранил их в той же папке, где находится app.R.
Затем я читаю модели и данные прогнозируемых вероятностей и определяю некоторые функции:
# Reading data phats <- read.csv("Predicted_probabilities_training.csv") phats_graph <- phats %>% mutate(`PTD Event Status` = ifelse(Observed_Event=="PTD", "PTD Event", "No PTD Event")) phats_event <- phats[phats$Observed_Event=="PTD",] phats_nonevent <- phats[phats$Observed_Event=="No_PTD",] # load the models ridge_model <- readRDS("ridge_model.rds") final_model <- readRDS("final_model.rds") # Defining some functions matrix.for.ILS.function <- function(input){ return(data.matrix(data.frame(input$MIP_1a, input$MIP_3a, input$RANTES, input$sIL_6R, input$ITAC, input$IL_21, input$Fractalkine, input$TNF_a, input$IL_1b, input$IL_7, input$IL_10, input$GM_CSF, input$MIP_1b))) } ILS.function <- function(input){ ILS.ridge = as.numeric(predict(ridge_model, matrix.for.ILS.function(input), s = 0.7414409, type="link")) return(ILS.ridge) } test.data.function <- function(input){ test.data = data.frame(Age=input$Age, Gender=input$Gender, GCS_Bestin24=input$GCS_Bestin24, Premorbid_depression=input$Premorbid_depression, Antidep_first6m=input$Antidep_first6m) return(cbind(test.data, ILS.ridge=ILS.function(input))) } pred_prob_func <- function(input){ pred_prob = predict(final_model, test.data.function(input), type="prob")[,"PTD"] classification <- ifelse(pred_prob >= input$thresholdslider, "PTD Event", "No Event") return(list(pred_prob=pred_prob, classification=classification)) }
Затем, после написания пользовательского интерфейса и серверных кодов, я пытаюсь создать график, но он показывает мне ошибку: "аргументы подразумевают разное количество строк: 0, 1". Я проверил, что
pred_prob_func
приводит к этой ошибке. Хотя, когда я попытался создать списокinput
, вызванный простым созданием списка случайных значений для переменных, и попытался посмотреть,pred_prob_func(input)
создает ли он значение, оно на самом деле создает значение. Но когда я пытаюсь запустить приложение, график не отображается и выдает мне эту ошибку. Я использую следующие коды в разделе сервера для создания графика.output$int_plot <- renderPlotly({ phats_graph #r #shiny #r-caret #caret #glmnet
Вопрос:
Я пытаюсь создать приложение R Shiny, которое вычисляет оценку с помощью регрессии хребта, а затем использует ее в модели случайного леса. Я сохранил обе модели как RDS и сохранил их в той же папке, где находится app.R. Затем я читаю модели и данные прогнозируемых вероятностей и определяю некоторые функции:
# Reading data phats <- read.csv("Predicted_probabilities_training.csv") phats_graph <- phats %>% mutate(`PTD Event Status` = ifelse(Observed_Event=="PTD", "PTD Event", "No PTD Event")) phats_event <- phats[phats$Observed_Event=="PTD",] phats_nonevent <- phats[phats$Observed_Event=="No_PTD",] # load the models ridge_model <- readRDS("ridge_model.rds") final_model <- readRDS("final_model.rds") # Defining some functions matrix.for.ILS.function <- function(input){ return(data.matrix(data.frame(input$MIP_1a, input$MIP_3a, input$RANTES, input$sIL_6R, input$ITAC, input$IL_21, input$Fractalkine, input$TNF_a, input$IL_1b, input$IL_7, input$IL_10, input$GM_CSF, input$MIP_1b))) } ILS.function <- function(input){ ILS.ridge = as.numeric(predict(ridge_model, matrix.for.ILS.function(input), s = 0.7414409, type="link")) return(ILS.ridge) } test.data.function <- function(input){ test.data = data.frame(Age=input$Age, Gender=input$Gender, GCS_Bestin24=input$GCS_Bestin24, Premorbid_depression=input$Premorbid_depression, Antidep_first6m=input$Antidep_first6m) return(cbind(test.data, ILS.ridge=ILS.function(input))) } pred_prob_func <- function(input){ pred_prob = predict(final_model, test.data.function(input), type="prob")[,"PTD"] classification <- ifelse(pred_prob >= input$thresholdslider, "PTD Event", "No Event") return(list(pred_prob=pred_prob, classification=classification)) }
Затем, после написания пользовательского интерфейса и серверных кодов, я пытаюсь создать график, но он показывает мне ошибку: "аргументы подразумевают разное количество строк: 0, 1". Я проверил, что
pred_prob_func
приводит к этой ошибке. Хотя, когда я попытался создать списокinput
, вызванный простым созданием списка случайных значений для переменных, и попытался посмотреть,pred_prob_func(input)
создает ли он значение, оно на самом деле создает значение. Но когда я пытаюсь запустить приложение, график не отображается и выдает мне эту ошибку. Я использую следующие коды в разделе сервера для создания графика.Total Percentile` <- unlist(t(sapply(phats_graph$Phat, function(x) quantile_fun(value=x)))[,1])
phats_graph#r #shiny #r-caret #caret #glmnet
Вопрос:
Я пытаюсь создать приложение R Shiny, которое вычисляет оценку с помощью регрессии хребта, а затем использует ее в модели случайного леса. Я сохранил обе модели как RDS и сохранил их в той же папке, где находится app.R.
Затем я читаю модели и данные прогнозируемых вероятностей и определяю некоторые функции:
# Reading data phats <- read.csv("Predicted_probabilities_training.csv") phats_graph <- phats %>% mutate(`PTD Event Status` = ifelse(Observed_Event=="PTD", "PTD Event", "No PTD Event")) phats_event <- phats[phats$Observed_Event=="PTD",] phats_nonevent <- phats[phats$Observed_Event=="No_PTD",] # load the models ridge_model <- readRDS("ridge_model.rds") final_model <- readRDS("final_model.rds") # Defining some functions matrix.for.ILS.function <- function(input){ return(data.matrix(data.frame(input$MIP_1a, input$MIP_3a, input$RANTES, input$sIL_6R, input$ITAC, input$IL_21, input$Fractalkine, input$TNF_a, input$IL_1b, input$IL_7, input$IL_10, input$GM_CSF, input$MIP_1b))) } ILS.function <- function(input){ ILS.ridge = as.numeric(predict(ridge_model, matrix.for.ILS.function(input), s = 0.7414409, type="link")) return(ILS.ridge) } test.data.function <- function(input){ test.data = data.frame(Age=input$Age, Gender=input$Gender, GCS_Bestin24=input$GCS_Bestin24, Premorbid_depression=input$Premorbid_depression, Antidep_first6m=input$Antidep_first6m) return(cbind(test.data, ILS.ridge=ILS.function(input))) } pred_prob_func <- function(input){ pred_prob = predict(final_model, test.data.function(input), type="prob")[,"PTD"] classification <- ifelse(pred_prob >= input$thresholdslider, "PTD Event", "No Event") return(list(pred_prob=pred_prob, classification=classification)) }
Затем, после написания пользовательского интерфейса и серверных кодов, я пытаюсь создать график, но он показывает мне ошибку: "аргументы подразумевают разное количество строк: 0, 1". Я проверил, что
pred_prob_func
приводит к этой ошибке. Хотя, когда я попытался создать списокinput
, вызванный простым созданием списка случайных значений для переменных, и попытался посмотреть,pred_prob_func(input)
создает ли он значение, оно на самом деле создает значение. Но когда я пытаюсь запустить приложение, график не отображается и выдает мне эту ошибку. Я использую следующие коды в разделе сервера для создания графика.PTD Percentile` <- unlist(t(sapply(phats_graph$Phat, function(x) quantile_fun(value=x)))[,2])
phats_graph#r #shiny #r-caret #caret #glmnet
Вопрос:
Я пытаюсь создать приложение R Shiny, которое вычисляет оценку с помощью регрессии хребта, а затем использует ее в модели случайного леса. Я сохранил обе модели как RDS и сохранил их в той же папке, где находится app.R.
Затем я читаю модели и данные прогнозируемых вероятностей и определяю некоторые функции:
# Reading data phats <- read.csv("Predicted_probabilities_training.csv") phats_graph <- phats %>% mutate(`PTD Event Status` = ifelse(Observed_Event=="PTD", "PTD Event", "No PTD Event")) phats_event <- phats[phats$Observed_Event=="PTD",] phats_nonevent <- phats[phats$Observed_Event=="No_PTD",] # load the models ridge_model <- readRDS("ridge_model.rds") final_model <- readRDS("final_model.rds") # Defining some functions matrix.for.ILS.function <- function(input){ return(data.matrix(data.frame(input$MIP_1a, input$MIP_3a, input$RANTES, input$sIL_6R, input$ITAC, input$IL_21, input$Fractalkine, input$TNF_a, input$IL_1b, input$IL_7, input$IL_10, input$GM_CSF, input$MIP_1b))) } ILS.function <- function(input){ ILS.ridge = as.numeric(predict(ridge_model, matrix.for.ILS.function(input), s = 0.7414409, type="link")) return(ILS.ridge) } test.data.function <- function(input){ test.data = data.frame(Age=input$Age, Gender=input$Gender, GCS_Bestin24=input$GCS_Bestin24, Premorbid_depression=input$Premorbid_depression, Antidep_first6m=input$Antidep_first6m) return(cbind(test.data, ILS.ridge=ILS.function(input))) } pred_prob_func <- function(input){ pred_prob = predict(final_model, test.data.function(input), type="prob")[,"PTD"] classification <- ifelse(pred_prob >= input$thresholdslider, "PTD Event", "No Event") return(list(pred_prob=pred_prob, classification=classification)) }
Затем, после написания пользовательского интерфейса и серверных кодов, я пытаюсь создать график, но он показывает мне ошибку: "аргументы подразумевают разное количество строк: 0, 1". Я проверил, что
pred_prob_func
приводит к этой ошибке. Хотя, когда я попытался создать списокinput
, вызванный простым созданием списка случайных значений для переменных, и попытался посмотреть,pred_prob_func(input)
создает ли он значение, оно на самом деле создает значение. Но когда я пытаюсь запустить приложение, график не отображается и выдает мне эту ошибку. Я использую следующие коды в разделе сервера для создания графика.No PTD Percentile` <- unlist(t(sapply(phats_graph$Phat, function(x) quantile_fun(value=x)))[,3])
int_plot <- ggplot(phats_graph, aes(ptd_per=`No PTD Percentile`)) geom_density(aes(x=Phat, fill = `PTD Event Status`), alpha=0.5)
geom_vline(xintercept = input$thresholdslider, linetype = 'dashed')
geom_vline(xintercept = pred_prob_func(input)$pred_prob)
xlab('Threshold Percentage') ylab('Density')
theme_minimal() scale_fill_manual(values=c("#5D3A9B", "#E66100"), name="")ggplotly(int_plot, tooltip=c("x", "ptd_per"))
})
Есть ли проблема с тем, как я определяю функции?
Правки:
Все файлы (данные, модели RDS) и приложение можно найти на этом диске Google для тестирования.
Я протестировал функции, используя следующие примеры входных данных (которые дали результаты, когда я использовал это в качестве аргумента в функциях, но показывает эту ошибку при попытке запустить приложение).:
input=list(Age=20, Gender=1, GCS_Bestin24=4, Premorbid_depression=0, Antidep_first6m=0, MIP_1a=1, MIP_3a=1, RANTES=1, sIL_6R=1, ITAC=1, IL_21=1, Fractalkine=1, TNF_a=1, IL_1b=1, IL_7=1, IL_10=1, GM_CSF=1, MIP_1b=1, thresholdslider=0.5)
Комментарии:
1. Дайте мне знать, если я смогу дать больше информации, и я смогу отредактировать вопрос.
2. Вы пытались определить, где именно происходят ошибки ? Я думаю, что это может быть в
cbind
функции intest.data.function
. Вы должны добавить немногоprint(input$Age)
и т. Д... в этой функции, чтобы убедиться, что ваши входные данные действительно имеют значения.3. @gdevaux Я протестировал функции, используя входные данные, которые теперь есть в моих правках.
Ответ №1:
Первоначальная ошибка возникает из-за того, что вы не запрашиваете то
input$id
же самоеid
, что вы назначаетеtextInput
.textInput("MIPa", label = HTML("MIP-1\(\alpha\)") ##used in ui input$MIP_1a ##used in server.
Я думаю, что есть проблема с использованием
input
переменной shiny.Создав список входных данных как
input_list
и изменив места, в которые выinput
самиinput()
звоните, кажется, что это работает.Мне также нужно было удалить
test.data.function(input)
сразу послеtest.data.function()
создания функции, чтобы запустить приложение.input_list <- reactive({ input_list <- list( Age=as.numeric(input$Age), Gender=ifelse(input$Gender == "Female", 1, 0), GCS_Bestin24=as.numeric(input$GCS_Bestin24), Premorbid_depression=as.numeric(input$Premorbid_depression), Antidep_first6m=as.numeric(input$Antidep_first6m), MIP_1a = as.numeric(input$MIPa), MIP_3a = as.numeric(input$MIP_3a), RANTES = as.numeric(input$RANTES), sIL_6R = as.numeric(input$sIL_6R), ITAC = as.numeric(input$ITAC), IL_21 = as.numeric(input$IL_21), Fractalkine = as.numeric(input$Fractalkine), TNF_a = as.numeric(input$TNF_a), IL_1b = as.numeric(input$ILb), IL_7 = as.numeric(input$IL_7), IL_10 = as.numeric(input$IL0), GM_CSF = as.numeric(input$GM_CSF), MIP_1b = as.numeric(input$MIPb)) input_list })
##input changed to input_list() ##this needs to be done for each instance where input is used on its own. geom_vline(xintercept = pred_prob_func(input_list())$pred_prob)
Чтобы удалить окончательное сообщение об ошибке, вам необходимо изменить значение
renderPlotly()
наrenderUI()
и включить проверкуNA
значений вinput_list
.
plotlyOutput
Также необходимо изменить значениеuiOutput()
вui
разделе.PTD Percentile` <- unlist(t(sapply(phats_graph$Phat, function(x) quantile_fun(value=x)))[,2])
phats_graph#r #shiny #r-caret #caret #glmnet
Вопрос:
Я пытаюсь создать приложение R Shiny, которое вычисляет оценку с помощью регрессии хребта, а затем использует ее в модели случайного леса. Я сохранил обе модели как RDS и сохранил их в той же папке, где находится app.R.
Затем я читаю модели и данные прогнозируемых вероятностей и определяю некоторые функции:
# Reading data phats <- read.csv("Predicted_probabilities_training.csv") phats_graph <- phats %>% mutate(`PTD Event Status` = ifelse(Observed_Event=="PTD", "PTD Event", "No PTD Event")) phats_event <- phats[phats$Observed_Event=="PTD",] phats_nonevent <- phats[phats$Observed_Event=="No_PTD",] # load the models ridge_model <- readRDS("ridge_model.rds") final_model <- readRDS("final_model.rds") # Defining some functions matrix.for.ILS.function <- function(input){ return(data.matrix(data.frame(input$MIP_1a, input$MIP_3a, input$RANTES, input$sIL_6R, input$ITAC, input$IL_21, input$Fractalkine, input$TNF_a, input$IL_1b, input$IL_7, input$IL_10, input$GM_CSF, input$MIP_1b))) } ILS.function <- function(input){ ILS.ridge = as.numeric(predict(ridge_model, matrix.for.ILS.function(input), s = 0.7414409, type="link")) return(ILS.ridge) } test.data.function <- function(input){ test.data = data.frame(Age=input$Age, Gender=input$Gender, GCS_Bestin24=input$GCS_Bestin24, Premorbid_depression=input$Premorbid_depression, Antidep_first6m=input$Antidep_first6m) return(cbind(test.data, ILS.ridge=ILS.function(input))) } pred_prob_func <- function(input){ pred_prob = predict(final_model, test.data.function(input), type="prob")[,"PTD"] classification <- ifelse(pred_prob >= input$thresholdslider, "PTD Event", "No Event") return(list(pred_prob=pred_prob, classification=classification)) }
Затем, после написания пользовательского интерфейса и серверных кодов, я пытаюсь создать график, но он показывает мне ошибку: "аргументы подразумевают разное количество строк: 0, 1". Я проверил, что
pred_prob_func
приводит к этой ошибке. Хотя, когда я попытался создать списокinput
, вызванный простым созданием списка случайных значений для переменных, и попытался посмотреть,pred_prob_func(input)
создает ли он значение, оно на самом деле создает значение. Но когда я пытаюсь запустить приложение, график не отображается и выдает мне эту ошибку. Я использую следующие коды в разделе сервера для создания графика.output$int_plot <- renderPlotly({ phats_graph #r #shiny #r-caret #caret #glmnet
Вопрос:
Я пытаюсь создать приложение R Shiny, которое вычисляет оценку с помощью регрессии хребта, а затем использует ее в модели случайного леса. Я сохранил обе модели как RDS и сохранил их в той же папке, где находится app.R. Затем я читаю модели и данные прогнозируемых вероятностей и определяю некоторые функции:
# Reading data phats <- read.csv("Predicted_probabilities_training.csv") phats_graph <- phats %>% mutate(`PTD Event Status` = ifelse(Observed_Event=="PTD", "PTD Event", "No PTD Event")) phats_event <- phats[phats$Observed_Event=="PTD",] phats_nonevent <- phats[phats$Observed_Event=="No_PTD",] # load the models ridge_model <- readRDS("ridge_model.rds") final_model <- readRDS("final_model.rds") # Defining some functions matrix.for.ILS.function <- function(input){ return(data.matrix(data.frame(input$MIP_1a, input$MIP_3a, input$RANTES, input$sIL_6R, input$ITAC, input$IL_21, input$Fractalkine, input$TNF_a, input$IL_1b, input$IL_7, input$IL_10, input$GM_CSF, input$MIP_1b))) } ILS.function <- function(input){ ILS.ridge = as.numeric(predict(ridge_model, matrix.for.ILS.function(input), s = 0.7414409, type="link")) return(ILS.ridge) } test.data.function <- function(input){ test.data = data.frame(Age=input$Age, Gender=input$Gender, GCS_Bestin24=input$GCS_Bestin24, Premorbid_depression=input$Premorbid_depression, Antidep_first6m=input$Antidep_first6m) return(cbind(test.data, ILS.ridge=ILS.function(input))) } pred_prob_func <- function(input){ pred_prob = predict(final_model, test.data.function(input), type="prob")[,"PTD"] classification <- ifelse(pred_prob >= input$thresholdslider, "PTD Event", "No Event") return(list(pred_prob=pred_prob, classification=classification)) }
Затем, после написания пользовательского интерфейса и серверных кодов, я пытаюсь создать график, но он показывает мне ошибку: "аргументы подразумевают разное количество строк: 0, 1". Я проверил, что
pred_prob_func
приводит к этой ошибке. Хотя, когда я попытался создать списокinput
, вызванный простым созданием списка случайных значений для переменных, и попытался посмотреть,pred_prob_func(input)
создает ли он значение, оно на самом деле создает значение. Но когда я пытаюсь запустить приложение, график не отображается и выдает мне эту ошибку. Я использую следующие коды в разделе сервера для создания графика.Total Percentile` <- unlist(t(sapply(phats_graph$Phat, function(x) quantile_fun(value=x)))[,1])
phats_graph#r #shiny #r-caret #caret #glmnet
Вопрос:
Я пытаюсь создать приложение R Shiny, которое вычисляет оценку с помощью регрессии хребта, а затем использует ее в модели случайного леса. Я сохранил обе модели как RDS и сохранил их в той же папке, где находится app.R.
Затем я читаю модели и данные прогнозируемых вероятностей и определяю некоторые функции:
# Reading data phats <- read.csv("Predicted_probabilities_training.csv") phats_graph <- phats %>% mutate(`PTD Event Status` = ifelse(Observed_Event=="PTD", "PTD Event", "No PTD Event")) phats_event <- phats[phats$Observed_Event=="PTD",] phats_nonevent <- phats[phats$Observed_Event=="No_PTD",] # load the models ridge_model <- readRDS("ridge_model.rds") final_model <- readRDS("final_model.rds") # Defining some functions matrix.for.ILS.function <- function(input){ return(data.matrix(data.frame(input$MIP_1a, input$MIP_3a, input$RANTES, input$sIL_6R, input$ITAC, input$IL_21, input$Fractalkine, input$TNF_a, input$IL_1b, input$IL_7, input$IL_10, input$GM_CSF, input$MIP_1b))) } ILS.function <- function(input){ ILS.ridge = as.numeric(predict(ridge_model, matrix.for.ILS.function(input), s = 0.7414409, type="link")) return(ILS.ridge) } test.data.function <- function(input){ test.data = data.frame(Age=input$Age, Gender=input$Gender, GCS_Bestin24=input$GCS_Bestin24, Premorbid_depression=input$Premorbid_depression, Antidep_first6m=input$Antidep_first6m) return(cbind(test.data, ILS.ridge=ILS.function(input))) } pred_prob_func <- function(input){ pred_prob = predict(final_model, test.data.function(input), type="prob")[,"PTD"] classification <- ifelse(pred_prob >= input$thresholdslider, "PTD Event", "No Event") return(list(pred_prob=pred_prob, classification=classification)) }
Затем, после написания пользовательского интерфейса и серверных кодов, я пытаюсь создать график, но он показывает мне ошибку: "аргументы подразумевают разное количество строк: 0, 1". Я проверил, что
pred_prob_func
приводит к этой ошибке. Хотя, когда я попытался создать списокinput
, вызванный простым созданием списка случайных значений для переменных, и попытался посмотреть,pred_prob_func(input)
создает ли он значение, оно на самом деле создает значение. Но когда я пытаюсь запустить приложение, график не отображается и выдает мне эту ошибку. Я использую следующие коды в разделе сервера для создания графика.PTD Percentile` <- unlist(t(sapply(phats_graph$Phat, function(x) quantile_fun(value=x)))[,2])
phats_graph#r #shiny #r-caret #caret #glmnet
Вопрос:
Я пытаюсь создать приложение R Shiny, которое вычисляет оценку с помощью регрессии хребта, а затем использует ее в модели случайного леса. Я сохранил обе модели как RDS и сохранил их в той же папке, где находится app.R.
Затем я читаю модели и данные прогнозируемых вероятностей и определяю некоторые функции:
# Reading data phats <- read.csv("Predicted_probabilities_training.csv") phats_graph <- phats %>% mutate(`PTD Event Status` = ifelse(Observed_Event=="PTD", "PTD Event", "No PTD Event")) phats_event <- phats[phats$Observed_Event=="PTD",] phats_nonevent <- phats[phats$Observed_Event=="No_PTD",] # load the models ridge_model <- readRDS("ridge_model.rds") final_model <- readRDS("final_model.rds") # Defining some functions matrix.for.ILS.function <- function(input){ return(data.matrix(data.frame(input$MIP_1a, input$MIP_3a, input$RANTES, input$sIL_6R, input$ITAC, input$IL_21, input$Fractalkine, input$TNF_a, input$IL_1b, input$IL_7, input$IL_10, input$GM_CSF, input$MIP_1b))) } ILS.function <- function(input){ ILS.ridge = as.numeric(predict(ridge_model, matrix.for.ILS.function(input), s = 0.7414409, type="link")) return(ILS.ridge) } test.data.function <- function(input){ test.data = data.frame(Age=input$Age, Gender=input$Gender, GCS_Bestin24=input$GCS_Bestin24, Premorbid_depression=input$Premorbid_depression, Antidep_first6m=input$Antidep_first6m) return(cbind(test.data, ILS.ridge=ILS.function(input))) } pred_prob_func <- function(input){ pred_prob = predict(final_model, test.data.function(input), type="prob")[,"PTD"] classification <- ifelse(pred_prob >= input$thresholdslider, "PTD Event", "No Event") return(list(pred_prob=pred_prob, classification=classification)) }
Затем, после написания пользовательского интерфейса и серверных кодов, я пытаюсь создать график, но он показывает мне ошибку: "аргументы подразумевают разное количество строк: 0, 1". Я проверил, что
pred_prob_func
приводит к этой ошибке. Хотя, когда я попытался создать списокinput
, вызванный простым созданием списка случайных значений для переменных, и попытался посмотреть,pred_prob_func(input)
создает ли он значение, оно на самом деле создает значение. Но когда я пытаюсь запустить приложение, график не отображается и выдает мне эту ошибку. Я использую следующие коды в разделе сервера для создания графика.No PTD Percentile` <- unlist(t(sapply(phats_graph$Phat, function(x) quantile_fun(value=x)))[,3])
int_plot <- ggplot(phats_graph, aes(ptd_per=`No PTD Percentile`)) geom_density(aes(x=Phat, fill = `PTD Event Status`), alpha=0.5)
geom_vline(xintercept = input$thresholdslider, linetype = 'dashed')
geom_vline(xintercept = pred_prob_func(input)$pred_prob)
xlab('Threshold Percentage') ylab('Density')
theme_minimal() scale_fill_manual(values=c("#5D3A9B", "#E66100"), name="")ggplotly(int_plot, tooltip=c("x", "ptd_per"))
})
Есть ли проблема с тем, как я определяю функции?
Правки:
Все файлы (данные, модели RDS) и приложение можно найти на этом диске Google для тестирования.
Я протестировал функции, используя следующие примеры входных данных (которые дали результаты, когда я использовал это в качестве аргумента в функциях, но показывает эту ошибку при попытке запустить приложение).:
input=list(Age=20, Gender=1, GCS_Bestin24=4, Premorbid_depression=0, Antidep_first6m=0, MIP_1a=1, MIP_3a=1, RANTES=1, sIL_6R=1, ITAC=1, IL_21=1, Fractalkine=1, TNF_a=1, IL_1b=1, IL_7=1, IL_10=1, GM_CSF=1, MIP_1b=1, thresholdslider=0.5)
Комментарии:
1. Дайте мне знать, если я смогу дать больше информации, и я смогу отредактировать вопрос.
2. Вы пытались определить, где именно происходят ошибки ? Я думаю, что это может быть в
cbind
функции intest.data.function
. Вы должны добавить немногоprint(input$Age)
и т. Д... в этой функции, чтобы убедиться, что ваши входные данные действительно имеют значения.3. @gdevaux Я протестировал функции, используя входные данные, которые теперь есть в моих правках.
Ответ №1:
Первоначальная ошибка возникает из-за того, что вы не запрашиваете то
input$id
же самоеid
, что вы назначаетеtextInput
.textInput("MIPa", label = HTML("MIP-1\(\alpha\)") ##used in ui input$MIP_1a ##used in server.
Я думаю, что есть проблема с использованием
input
переменной shiny.Создав список входных данных как
input_list
и изменив места, в которые выinput
самиinput()
звоните, кажется, что это работает.Мне также нужно было удалить
test.data.function(input)
сразу послеtest.data.function()
создания функции, чтобы запустить приложение.input_list <- reactive({ input_list <- list( Age=as.numeric(input$Age), Gender=ifelse(input$Gender == "Female", 1, 0), GCS_Bestin24=as.numeric(input$GCS_Bestin24), Premorbid_depression=as.numeric(input$Premorbid_depression), Antidep_first6m=as.numeric(input$Antidep_first6m), MIP_1a = as.numeric(input$MIPa), MIP_3a = as.numeric(input$MIP_3a), RANTES = as.numeric(input$RANTES), sIL_6R = as.numeric(input$sIL_6R), ITAC = as.numeric(input$ITAC), IL_21 = as.numeric(input$IL_21), Fractalkine = as.numeric(input$Fractalkine), TNF_a = as.numeric(input$TNF_a), IL_1b = as.numeric(input$ILb), IL_7 = as.numeric(input$IL_7), IL_10 = as.numeric(input$IL0), GM_CSF = as.numeric(input$GM_CSF), MIP_1b = as.numeric(input$MIPb)) input_list })
##input changed to input_list() ##this needs to be done for each instance where input is used on its own. geom_vline(xintercept = pred_prob_func(input_list())$pred_prob)
Чтобы удалить окончательное сообщение об ошибке, вам необходимо изменить значение
renderPlotly()
наrenderUI()
и включить проверкуNA
значений вinput_list
.
plotlyOutput
Также необходимо изменить значениеuiOutput()
вui
разделе.No PTD Percentile` <- unlist(t(sapply(phats_graph$Phat, function(x) quantile_fun(value=x)))[,3])
int_plot <- ggplot(phats_graph, aes(ptd_per=`No PTD Percentile`)) geom_density(aes(x=Phat, fill = `PTD Event Status`), alpha=0.5)
geom_vline(xintercept = input$thresholdslider, linetype = 'dashed')
geom_vline(xintercept = pred_prob_func(input_list())$pred_prob)
xlab('Threshold Percentage') ylab('Density')
theme_minimal() scale_fill_manual(values=c("#5D3A9B", "#E66100"), name="")renderPlotly( ggplotly(int_plot, tooltip=c("x", "ptd_per")))
}})
)
Когда возраст 10 лет и все значения равны 1 (понятия не имею, какими они должны быть), это вывод:
Комментарии:
1. Спасибо за ваш ответ! Я отредактировал свои коды, но все равно получаю сообщение об ошибке: «переменные»Возраст», «Пол», «Преморбидная депрессия», «Антидепрессант_фирст6м» были указаны с разными типами от соответствия». Я проверил, что в исходных данных, на основе которых я запустил модели случайных лесов, чтобы получить «final_model.RDS», все переменные были целыми числами (некоторые из них были двоичными (0/1)). Как я должен исправить это, чтобы создать график? Создавало ли приложение график, когда вы его пробовали?
2. Я обновил
input_list
версию, которая работает при предоставлении данных. Если вы измените каждое изinput$variable
numeric
as.numeric()
значений «кому», оно вернет правильный результат. Вам нужно будет проверить, какGender
переменной должно быть присвоено числовое значение (напримерFemale=1
), и она создает график только при наличии предоставленных данных. В противном случае естьError: User interrupt or internal error.
сообщение.3. Большое вам спасибо! Ты потрясающая! Есть ли способ подавить это
Error: User interrupt or internal error
или, может быть, показать сообщение с просьбой ввести значения?4. Я обновил ответ, чтобы добавить сообщение вместо сообщения об ошибке. Вы можете сделать это так, как вы хотите (например, таблицу, отображающую текущие значения пациентов).
5. это прекрасно работает, когда я запускаю приложение локально. Но это показывает мне ошибку «Произошла ошибка. Проверьте свои журналы или свяжитесь с автором приложения для получения разъяснений». когда я разверну его на сервере. Я не знаю, почему это могло произойти. У вас есть какие-нибудь предложения?