Я пытаюсь рассчитать взвешенный процент для определенных столбцов, которые являются реактивными. Я могу сделать это на R со следующим кодом:
a <- cbind(c(1, 0, 1, 0, 1), c(1, 1, 2, 2, 1), c(100, 200, 300, 50, 500))
colnames(a) <- c("gender", "race", "weights")
a <- as.data.frame(a)
a_stack <- a %>%
na.omit() %>%
select(gender, race, weights) %>%
group_by(gender, race) %>%
summarize(totalw = sum(weights)) %>%
mutate(Percentage = (totalw / sum(totalw)) * 100) %>%
arrange(gender)
Это мой вывод: Выход.
Как видно из вышеизложенного, веса складываются в зависимости от пола/расы, и я получаю конечный результат, который хочу.
Тем не менее, когда я пытаюсь преобразовать это в R Shiny и использовать в реактивном контексте, я получаю сообщение об ошибке «Ошибка оценки: недопустимый тип (символ) аргумента»..
Это мой код, который я использовал в R Shiny.
completeFun <- function(data, desiredCols) {
completeVec <- complete.cases(data[, desiredCols])
return(data[completeVec, ])
}
edited_stackbar <- reactive ({
completeFun(edited, c(input$x, input$y, input$weight)) %>%
select_(input$x, input$y, input$weight) %>%
group_by_(input$x, input$y) %>%
summarize(totalw = sum(input$weight)) %>%
mutate(Percentage = (totalw / sum(totalw)) * 100) %>%
arrange_(input$x) %>%
mutate(label_pos = cumsum(Percentage) - Percentage / 2,
perc_text = paste0(round(Percentage), "%"))
})
Его трудно воспроизвести, но я считаю, что основная проблема заключается в «обобщении» вещей. Я не уверен, следует ли мне использовать функцию реактивных/реактивных значений, поскольку веса и переменные будут меняться в зависимости от ввода пользователя или мне следует использовать другой набор данных.
Буду очень признателен за любую помощь! Спасибо.
Если суммировать - это ошибка, не могли бы вы попробовать?
edited_stackbar <- reactive ({
completeFun(edited, c(input$x, input$y, input$weight)) %>%
select_(input$x, input$y, input$weight) %>%
group_by_(input$x, input$y) %>%
summarize(totalw = sum(edited$nput$weight)) %>%
mutate(Percentage = (totalw / sum(totalw)) * 100) %>%
arrange_(input$x) %>%
mutate(label_pos = cumsum(Percentage) - Percentage / 2,
perc_text = paste0(round(Percentage), "%"))
})
Или
edited_stackbar <- reactive ({
completeFun(edited, c(input$x, input$y, input$weight)) %>%
select_(input$x, input$y, input$weight) %>%
group_by_(input$x, input$y) %>%
summarize(totalw = sum(get(input$weight))) %>%
mutate(Percentage = (totalw / sum(totalw)) * 100) %>%
arrange_(input$x) %>%
mutate(label_pos = cumsum(Percentage) - Percentage / 2,
perc_text = paste0(round(Percentage), "%"))
})
В любом случае у нас недостаточно информации, чтобы ответить вам. Можете ли вы показать вывод (отредактированный)?
Привет LocoGris, большое спасибо за вашу помощь! Ваш второй ответ сработал для меня, и это безумие, как что-то такое маленькое может повлиять на результаты. Тем не менее, еще раз спасибо!