Для L oop в RShiny: Предупреждение: «Ошибка в именах: 0 аргументов передано ... что требует 1» - PullRequest
2 голосов
/ 03 апреля 2020

с использованием RShiny / SQL в первый раз, так что я уверен, что неправильно понимаю основы, но ни одна из документации не помогает. Я пытаюсь:
(1) позволить пользователю выбрать, какую таблицу SQL загрузить в
(2) отправить строку символов (имена белков)
(3) вернуть, какие имена белков в выбранной таблице

я справился с первыми 2 штрафами, но в течение l oop я получаю ' 0 аргументов, переданных' names ', для которых требуется один ', и я не уверен почему. Мой код:

UI:

>library(shiny)

ui <- fluidPage(

  titlePanel("TBD"),

  sidebarLayout(

    sidebarPanel(

      selectInput("variable", "variable:",
                  list("Knoener" = "Knoener",
                       "Liz" = "Liz", 
                       "Kula" = "Kula")),
      actionButton("button1", "Click Me"),
      textInput("names","Enter protein symbols"),
      actionButton("button2", "Click Me"),
      actionButton("button3", "Let's go!")
    ),

    mainPanel(
      textOutput("text1"),
      textOutput("text2"),
      textOutput("text3")

    )
))

СЕРВЕР:

library("shiny")
library("DBI")
library("dplyr")
library("dbplyr")
library('pool')

loadData <- function(table) {
  db <- dbConnect(MySQL(), dbname = "knoenerdb", host = "localhost", 
                  user = "root", 
                  password = "blahblah")
  query <- sprintf("SELECT * FROM %s", table)
  chosendata <- dbGetQuery(db, query)
  dbDisconnect(db)
}

server <- function(input, output) {

    chosendata <- observeEvent(input$button1, {
      loadData(input$variable)
      output$text1 <- renderText({paste("input is",input$variable)})})

    names <- observeEvent( input$button2, {
        names <- unlist(strsplit(input$names, ", "))
        output$text2 <- renderText({paste("names are",names)})
    })

     observeEvent( input$button3, {
       for(i in 1:length(names())){
          if(names()[i] %in% chosendata()$proteins){
             updated = c(updated,names()[i])
          } else
             updated = c(updated, "NULL")
        }

     output$text3 <- renderText({paste("matches are",updated)})
    }) 

}

Спасибо за помощь!

1 Ответ

0 голосов
/ 03 апреля 2020

Полагаю, у вас есть некоторые имена. Попробуйте переименовать текстовый ввод names во что-то уникальное.

> names()
Error in names() : 0 arguments passed to 'names' which requires 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...