Обнаружена R блестящая ошибка: экстерьер нечисловой матрицы - PullRequest
0 голосов
/ 25 февраля 2019

Я написал приложение Rshiny.Здесь пользователь вводит список генов, и приложение создает из него биологическую сеть.Пример ввода показан ниже.Код работает из shinyapp как R-скрипт.Ввод текста, а не числовой.

Исследовал подобные вопросы по SO здесь , но не очень полезен, мой вклад - текст.

Любая помощь очень ценится.

library(shiny)
library(shinydashboard)
library(STRINGdb)

sidebar <- dashboardSidebar(
sidebarMenu(
menuItem("Analysis", tabName = "analysis")
))

body <- dashboardBody(
tabItems(
# Text Area Input for gene list
tabItem(tabName = "analysis", 
        fluidRow(
          box(
            title = "Input gene list here", status = "warning", width 
            = 6, textAreaInput("title1","",value = "", width = 
            '100%',rows=5),
            actionButton("submit", "Submit")
          )
        ),
        fluidRow(
          box(
            title = "Stirng DB network", status = "warning", width = 8, plotOutput("stringplot")
          )
        )
)))

# User interface --
ui <- dashboardPage(
dashboardHeader(title = "Analysis", titleWidth = 300),
sidebar,
body
)

# Server logic
server <- function(input, output) {
subset_dataset <- eventReactive(input$submit, 
{data.frame(strsplit(input$title1,split='[\r\n]'),col.names='genes')})
output$stringplot <- renderPlot({
string_db <- STRINGdb$new()
mapped_genes <- string_db$map(subset_dataset,subset_dataset()$genes,removeUnmappedRows = TRUE)
hits_2<-mapped_genes$STRING_id
string_db$plot_network(hits_2)})
}

shinyApp(ui = ui, server = server)

Пример ввода:

BRAF
NF1
NRAS
ERBB3
FLT3
PIK3CA
PTEN
TP53
CTNNB1
APC
SMAD4
NCOR1

1 Ответ

0 голосов
/ 26 февраля 2019

Если вы вставите browser() в eventReactive, вы можете проверить, что ваш data.frame выглядит следующим образом:

# c..BRAF....NF1....NRAS....ERBB3....FLT3....PIK3CA....PTEN....TP53... col.names
# 1                                                                  BRAF     genes
# 2                                                                   NF1     genes
# 3                                                                  NRAS     genes
# ...

Вы можете исправить это, используя вместо этого выражение: data.frame(genes = unlist(strsplit(input$title1,split='[\r\n]')))

Результирующий data.frame:

# genes
# 1    BRAF
# 2     NF1
# 3    NRAS
# ...

Я не знаком с пакетом, но мне кажется, что аргументы, переданные string_db$map, были неверны:

  • Первый аргумент: data.frame.При передаче reactive или eventReactive в Shiny вы должны включить круглые скобки (например: subset_dataset())
  • Второй аргумент: использовать строку символов: (например: "genes")

Это работает для меня: mapped_genes <- string_db$map(subset_dataset(), "genes",removeUnmappedRows = TRUE)

Вывод:

Output

Бонус: я бы добавил req(subset_dataset()) кпервая строка renderPlot, чтобы избежать рендеринга, когда данные null

...