Поскольку вы не предоставили воспроизводимый пример, я могу только догадываться, что вы пытаетесь сделать. Мне кажется, что вы используете пользовательскую функцию для агрегирования данных в реактивном выражении, основанном на пользовательском вводе (это предположение, оно не записано в предоставленном вами фрагменте кода).
Предположим, что вы действительно хотите запустить пользовательскую функцию на основе data.table для агрегирования данных в вашей блестящей функции сервера. Тогда кажется, что va = get(x)
вызывает ошибку, поскольку вы вызываете пользовательскую функцию со строкой „LGD-Class“
, а не с именем объекта.
Вы можете легко исправить это, вызвав x непосредственно в вызове data.table, поскольку аргумент by может обрабатывать строки. Ниже я приведу минимальный пример (A), который показывает, как такая функция в блестящем выражении сервера будет выглядеть, используя пользовательский ввод для вызова пользовательской функции. Сама функция очень проста, но должна легко адаптироваться к вашей проблеме.
Хотя это может решить вашу проблему, мне интересно, нужна ли вам в первую очередь пользовательская функция, поскольку вы можете использовать входную переменную непосредственно в реактивном выражении для генерации тех же агрегированных данных, что и пользовательская функция. Я также привожу пример (B) для такого рода агрегации данных.
Пример A (блестящее приложение с пользовательской функцией data.table в разделе сервера)
library("shiny")
library("data.table")
# Generate data
testDT <- data.table(a1 = c(rep("group1",4),rep("group2",4),rep("group3",4)),
a2 = rep(c("red","blue","green"),4),
x1 = c(5,6,7,3,4,5,2,3,4,2,1,7),
x2 = c(1,2,3,2,3,2,1,4,6,7,3,4),
x3 = c(12,43,64,34,93,16,32,74,84,89,45,67)
)
shinyApp(
ui = fluidPage( # user interface
sidebarLayout( # layout with Sidebar
sidebarPanel( # input sidebarPanel
selectInput(inputId = "group", label = "Choose grouping variable",
choices = c("Variable a1" = "a1",
"Variable a2" = "a2"),
selected = "a1")
), # closes sidebarPanel
mainPanel( # Output in mainPabel
tableOutput("table")
) # closes mainPanel
) # closes sidebarLayout
), # closes fluidPage
server = function(input, output) {
create.DT <- function(DT, x) { # custom data.table function
data <- DT[,.(x1 = mean(x1)
),
by = c(x)]
return(data)
}
react_testDT <- reactive({
t <- create.DT(testDT, input$group) # function call with user input
})
output$table <- renderTable({
react_testDT()
})
}
) # closes shinyApp
Пример B (пользовательский ввод в реактивном выражении для агрегирования данных)
library("shiny")
library("data.table")
# Generate data
testDT <- data.table(a1 = c(rep("group1",4),rep("group2",4),rep("group3",4)),
a2 = rep(c("red","blue","green"),4),
x1 = c(5,6,7,3,4,5,2,3,4,2,1,7),
x2 = c(1,2,3,2,3,2,1,4,6,7,3,4),
x3 = c(12,43,64,34,93,16,32,74,84,89,45,67)
)
shinyApp(
ui = fluidPage( # user interface
sidebarLayout( # layout with Sidebar
sidebarPanel( # input sidebarPanel
selectInput(inputId = "group", label = "Choose grouping variable",
choices = c("Variable a1" = "a1",
"Variable a2" = "a2"),
selected = "a1")
), # closes sidebarPanel
mainPanel( # Output in mainPabel
tableOutput("table")
) # closes mainPanel
) # closes sidebarLayout
), # closes fluidPage
server = function(input, output) {
react_testDT <- reactive({
testDT[, .(x1_mean = mean(x1)), by = c(input$group)]
})
output$table <- renderTable({
react_testDT()
})
}
) # closes shinyApp