我使用renderUI
写了一个小的Shiny应用程序。它运行正常,但R
控制台抛出了错误消息
if(nchar(locus)== 12){:参数长度为零
时出错
每次我运行此应用程序。
这是我的脚本。
server.R:
load("rapmsu.rda")
convMSU <- function(locus="Os02g0677300") {
if (nchar(locus)==12) {
return(rapmsu[rapmsu$rap==locus,])
} else {
return(NULL)
}
}
convRap <- function(locus="LOC_Os03g57940") {
if (nchar(locus)==14) {
return(rapmsu[rapmsu$msu==locus,])
} else {
return(NULL)
}
}
convID <- function(query="", text="") {
if (query=="RAPdb Locus") {
return(convMSU(text))
} else if (query=="MSU Locus") {
return(convRap(text))
}
}
query.intext.conv <- c("Os02g0677300", "LOC_Os03g57940")
names(query.intext.conv) <- c("RAPdb Locus", "MSU Locus")
#### Shiny
shinyServer(function(input, output) {
output$inTextconv <- renderUI({
textInput("inTextconv", strong("Put your query here:"),
value=query.intext.conv[input$queryconv])
})
output$mytable10 = renderDataTable({
convID(input$queryconv, input$inTextconv)
}, options = list(aLengthMenu = 1, iDisplayLength = 1,
bFilter = FALSE, bAutoWidth = FALSE)
)
})
ui.R:
shinyUI(fluidPage(
fluidRow(
absolutePanel(
br(),
selectInput("queryconv", h4("* Convert ID of MSU genomic locus
and RAPdb genomic locus"),
choices=c("RAPdb Locus", "MSU Locus")),
uiOutput("inTextconv"),
tabsetPanel(
tabPanel(strong('Result'), dataTableOutput("mytable10"))
),
br(),
right=5, left=10
)
)
))
变量“rapmsu”是一个数据框。
> head(rapmsu)
rap msu
1 Os01g0100100 LOC_Os01g01010
2 Os01g0100200 LOC_Os01g01019
3 Os01g0100300 None
4 Os01g0100400 LOC_Os01g01030
5 Os01g0100466 None
6 Os01g0100500 LOC_Os01g01040
答案 0 :(得分:4)
确保在函数中包含所有测试用例。首先测试NULL
和NA
,然后进行nchar
评估。以下是您的某个功能的修改示例:
convMSU <- function(locus="Os02g0677300") {
if(is.null(locus) || is.na(locus))
{
return()
}
else if (nchar(locus)==12) {
return(rapmsu[rapmsu$rap==locus,])
}
else {
return()
}
}
正如您所看到的,我首先测试了NULL和NA,然后评估了表达式。正如您的错误所示:argument is of length zero