#r #shiny #shiny-server #shinydashboard
#r #блестящий #shiny-сервер #shinydashboard
Вопрос:
У меня есть блестящее приложение, которое позволяет пользователю подмножествовать фрейм данных, выбирая имя столбца из выпадающего списка и присваивая ему значение. В приведенном ниже фрагменте df1 представляет собой фрейм данных, и если пользователь выбирает «country» из выпадающего списка и вводит «UK» в текстовое поле, временный df, temp_dat должен содержать только значения UK. По какой-то причине, которую я не могу понять, в нем указано, что было возвращено 0 строк из 3 столбцов. Может ли кто-нибудь помочь мне с этим? Заранее спасибо.
library(shinydashboard)
ui = dashboardPage(dashboardHeader(),
dashboardSidebar(),
dashboardBody(uiOutput("subset_check1"), uiOutput("subsetbox1")))
server = function(input, output, session)
{
names = c("Jane", "Doe", "Job", "Right")
emp_id = c(1000, 1001, 1002, 1003)
country = c("UK", "UK", "UK", "US")
df1 = data.frame(names, emp_id, country)
file1_cols = colnames(df1)
output$subset_check1 = renderUI(checkboxInput(
"subcheck1",
"Would you like to subset this dataset with a condition?"
))
observe({
if (!is.null(input$subcheck1))
{
if (input$subcheck1 == "TRUE")
{
#print("box was checked")
output$subsetbox1 = renderUI(flowLayout(
selectInput(
"subsetbox1sel",
"Select column:",
choices = c(file1_cols),
multiple = T
),
textInput("subsetbox1text", "Enter value")
))
observe({
if (!is.null(input$subsetbox1sel))
{
if (!is.null(input$subsetbox1text))
{
cols_sel1 = as.character(input$subsetbox1sel)
vals_sel1 = as.character(input$subsetbox1text)
temp_dat = df1[df1$cols_sel1 == vals_sel1, ]
print(temp_dat)
}
}
})
}
}
})
}
Комментарии:
1. Я даже пробовал: subset(df1,cols_sel1==vals_sel1) безрезультатно. Я не могу понять, что я делаю неправильно. Когда я печатаю cols_sel1, я вижу страну, а vals_sel1 — Великобританию в качестве символов. Почему тогда у temp_dat все еще нет данных, которые я ожидаю.
2. К вашему сведению: чтобы сделать код работоспособным, мне пришлось добавить
library(shinydashbard)
и изменить код пользовательскогоui=dashboardPage(dashboardHeader(), dashboardSidebar(), dashboardBody(uiOutput("subset_check1"),uiOutput("subsetbox1")))
интерфейса.3. Извинения. Обновил вопрос, чтобы отразить это.
Ответ №1:
В настоящее время во фрейме данных нет столбца с именем cols_sel1. Но вы намерены передать его строковое буквальное значение. Следовательно, не используйте спецификатор dollar $
, а строку для ссылки на столбец (т. Е. Используйте последнее из приведенных ниже), тем более, что этот cols_sel1 зависит от выбора пользователя:
df$col
df['col']
Так что просто настройте свою temp_dat
строку на:
temp_dat = df1[df1[cols_sel1]==vals_sel1,]
Комментарии:
1. @rookieJoe Пожалуйста, примите этот ответ, поскольку он работает как шарм
2. Действительно, это работает как шарм! Огромное спасибо @Parfait.