Я сам создал примерный фрейм данных, как вы упомянули выше. Вот модифицированный код.
Изменения, которые я сделал:
input$geneExp
и input$patients
уже являются реактивными, поэтому нет необходимости использовать отдельную реактивную функцию.
Отфильтрованные кадры данных для построения графиков используют те же
Кроме того, в selectInput
установлено значение по умолчанию selected
, чтобы избежать начального сообщение об ошибке, когда ничего не выбрано
library(shiny)
library(shinythemes)
library(lattice)
anno_genExp_off <- data.frame(`99901` = c(4.3,6.5,6.6),
`99902` = c(5.3,7.5,8.6),
`99903` = c(6.3,8.5,9.6),
row.names = c("SKI","VWA1","TTLL10"))
anno <- as.matrix(anno_genExp_off)
#Define UI
ui <- fluidPage(
sidebarPanel(
titlePanel(title = "Gen3 Gene Expression Data"),
selectInput(inputId = "patients",
label = strong("Please choose patient/s to examine"),
choices = colnames(anno_genExp_off),
selected = colnames(anno_genExp_off)[1],
multiple = TRUE),
selectInput(inputId = "geneExp",
label = "Please select gene expressions/s to examine",
choices = rownames(anno_genExp_off),
selected = rownames(anno_genExp_off)[1],
multiple = TRUE)),
mainPanel(plotOutput("testPlot"))
)
server <- function(input, output) {
#pdata <- reactive(input$patients)
#gdata <-reactive(input$geneExp)
output$testPlot <- renderPlot ({
levelplot(x = as.matrix(anno_genExp_off[which(rownames(anno_genExp_off) %in% input$geneExp) ,input$patients]),
col.regions=colorRampPalette(c("red","green","blue")))
})
}
shiny::shinyApp(ui,server)
Ну, существуют определенные известные методы как конкатенация строк, путь медленнее, чем "# {значение}", но для обнаружения, где Вы пишете сценарий, использует большую часть времени или больше времени, чем необходимый, необходимо сделать профилирование. Существует рубиновый драгоценный камень, названный рубиновым профессором. Профилировщик может принести к Вашему уведомлению даже те проблемы производительности, которые могут редко происходить. Я использовал его много и нахожу его очень полезным. Вот некоторая информация об этом непосредственно от ее официального сайта
рубиновый профессор является быстрым профилировщиком кода для Ruby. Его функции включают:
Скорость - это - расширение C и поэтому много раз быстрее, чем типичный профилировщик Ruby.
Режимы - Ruby профессор может измерить много различных параметров, включая времена вызова, использование памяти и возразить выделениям.
Отчеты - могут генерировать текст и перекрестно сослались на отчеты HTML
Плоские Профили - подобный отчетам сгенерированы типичным профилировщиком Ruby
Профили графика - подобный GProf, они показывают, сколько времени метод работает, какие методы называют его и какие методы он называет.
Назовите древовидные профили - выходные результаты в calltree формате подходящий для KCacheGrind профильный инструмент.
Потоки - поддержки, представляющие несколько потоков одновременно
Рекурсивные вызовы - поддержки, представляющие рекурсивные вызовы метода
Можно проверить производительность отдельных разделов кода со стандартным модулем Сравнительного теста.
Вы могли также протестировать свой код различных реализаций Ruby (например, 1.9, Rubinius) и видеть, ускоряет ли это вещи.
Конечно, если Ваши проблемы являются алгоритмическими по своей природе затем нет слишком большого количества точки в волнении по поводу вещей как скорости конкатенации строк...
Ответ на конкатенацию строк здесь: https://web.archive.org/web/20090122123342/http://blog.cbciweb.com/2008/06/10/ruby-performance-use-double-quotes-vs-single-quotes
Существует также ряд dTrace инструменты для Ruby, который можно использовать в dTraceToolkit
Помимо того, что записано выше, я также рекомендую наблюдать Масштабирующийся скринкаст Ruby. Это имеет некоторый интересный tips&tricks о том, как написать более быстрый код Ruby.