Блестящее приложение выдает ошибку: «аргументы подразумевают разное количество строк: 0, 1»

#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 функции in test.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 функции in test.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 функции in test.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 функции in test.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. это прекрасно работает, когда я запускаю приложение локально. Но это показывает мне ошибку «Произошла ошибка. Проверьте свои журналы или свяжитесь с автором приложения для получения разъяснений». когда я разверну его на сервере. Я не знаю, почему это могло произойти. У вас есть какие-нибудь предложения?