2015-10-30 42 views
2

我正在创建一个Shiny应用程序来执行简历上的文本分析。在R Studio中一切正常,但是当我尝试运行Shiny应用程序时,我的合格函数(输出)出现“下标越界”的错误。在Shiny中出现错误“下标越界”,但在R中没有出现?

就R工作室,我运行此代码,它工作正常(必须插入的.txt文件的文件夹中样1为它实际运行):

cname <- file.path("insert any file of .txt documents") 
dir(cname) 
length(dir(cname)) 
library(tm) 
docs <- Corpus(DirSource(cname)) 
toSpace <- content_transformer(function(x, pattern) gsub(pattern, " ", x)) 
docs <- tm_map(docs, toSpace, "/|@|\\|") 
docs <- tm_map(docs, content_transformer(tolower)) 
docs <- tm_map(docs, removePunctuation) 
docs <- tm_map(docs, removeWords, stopwords ("english")) 
docs <- tm_map(docs, removeNumbers) 
dtm <- DocumentTermMatrix(docs) 
freq <- colSums(as.matrix(dtm)) 
length(freq) 
list<-DocumentTermMatrix(docs,list(dictionary = c("python", "machine"))) 
relist=as.data.frame(as.matrix(list)) 
machine = ifelse(relist$machine > 0, 1,0) 
python = ifelse(relist$python > 0, 1,0) 
as.numeric(machine) 
as.numeric(python) 
newlist=cbind(machine, python) 
totals=rowSums(newlist) 
docname=dir(cname) 
wordtotals=cbind(docname, totals) 
qualified=wordtotals[wordtotals[,2]>=2,] 

就R闪亮,我有下面的代码:

## ui.R 
shinyUI(fluidPage(
    titlePanel("Resume Text Analysis"), 

    sidebarLayout(position = "right", 
    mainPanel(h2("Qualified Applicants"), dataTableOutput("table")), 
    sidebarPanel(h2("Specifications"), 

     textInput("filepath", label = h4("Paste the file path for the folder of '.txt' files you would like included in the analysis.")), 

     helpText("Choose up to 10 words that a qualified applicant should have in their resume. These can be skills, programming languages, etc. Please put '' '' on either side of each word."), 

     textInput("word1", label = h3("Term 1"), 
       value = ""), 
     textInput("word2", label = h3("Term 2"), 
       value = ""), 

     helpText("A qualified applicant will have a resume with at least ___ of the terms above."), 

     numericInput("morethan", 
        label = h3("Number of terms required:"), 
        min = 1, max = 2, value = 1) 

) 

))) 

## server.R 


library(tm) 

shinyServer(
    function(input, output) { 
    observeEvent(input$filepath,{ 
     if(is.null(input$filepath) || nchar(input$filepath) ==0) return(NULL) 

     cname <- file.path(input$filepath) 

     dir(cname) 
     length(dir(cname)) 

     docs <- Corpus(DirSource(cname)) 

     toSpace <- content_transformer(function(x, pattern) gsub(pattern, " ", x)) 
     docs <- tm_map(docs, toSpace, "/|@|\\|") 
     docs <- tm_map(docs, content_transformer(tolower)) 
     docs <- tm_map(docs, removePunctuation) 
     docs <- tm_map(docs, removeWords, stopwords ("english")) 
     docs <- tm_map(docs, removeNumbers) 

     one = input$word1 
     two = input$word2 

     list<-DocumentTermMatrix(docs,list(dictionary = c(one, two))) 

     relist=as.data.frame(as.matrix(list)) 

     one = ifelse(relist$one > 0, 1,0) 
     two = ifelse(relist$two > 0, 1,0) 

     as.numeric(one) 
     as.numeric(two) 

     newlist=cbind(one, two) 

     totals=rowSums(newlist) 

     docname=dir(cname) 

     wordtotals=cbind(docname, totals) 

     num = input$morethan 

     as.numeric(num) 

    output$table <- renderDataTable({ 
     wordtotals[wordtotals[,2]>=num,] 
    }) 

    }) 

} 
) 

这为R闪亮之内的误差(因为代码中的R Studio中正常工作)还是我失去了我的编码的东西吗?

感谢

+0

抛出一些'browser()'调用,并检查你的对象R里面闪闪发光。 – Gregor

回答

0

重做你server.R这样,你的问题尝试访问的列在datafram与$运营商来了,df$str等于df["str"]其中str是一个实际的列名,而不是变量。试试这个,这应该适合你。

shinyServer(function(input, output) { 

    observe({ 
    # Check path input 
    if(is.null(input$filepath) || nchar(input$filepath) == 0) return(NULL) 

    # Check if valid 
    if(!dir.exists(input$filepath)) return(NULL) 
    output$table1 <- renderTable({ 
     as.data.frame(qualified) 
    }) 

    cname <- input$filepath 

    docs <- Corpus(DirSource(cname)) 
    toSpace <- content_transformer(function(x, pattern) gsub(pattern, " ", x)) 
    docs <- tm_map(docs, toSpace, "/|@|\\|") 
    docs <- tm_map(docs, content_transformer(tolower)) 
    docs <- tm_map(docs, removePunctuation) 
    docs <- tm_map(docs, removeWords, stopwords ("english")) 
    docs <- tm_map(docs, removeNumbers) 
    dtm <- DocumentTermMatrix(docs) 

    d <- c(input$word1, input$word2, input$word3, input$word4, input$word5, 
      input$word6, input$word7, input$word8, input$word9, input$word10) 

    list <- DocumentTermMatrix(docs,list(dictionary = d)) 
    relist <- as.data.frame(as.matrix(list)) 

    res <- do.call(cbind,lapply(names(relist),function(n){ ifelse(relist[n] > 0, 1,0)})) 

    totals <- rowSums(res, na.rm=TRUE) 

    docname=dir(cname) 

    wordtotals=cbind(docname, totals) 

    num=input$morethan 

    df <- data.frame("document"=docname,"total"=totals) 
    output$table1 <- renderTable({ 
     df[df$total >= as.numeric(num), ] 
    }) 

    }) 
} 
) 
+0

这似乎已经部分解决了它!现在,当我运行代码时,我不再收到错误消息,但我仍然没有得到输出。 RECV {“method”:“update”,“data”:{“filepath”:“我的.txt文件的文件夹,”word1“:”'r'“,”word2“:”'python'“}} RECV { “方法”: “更新”, “数据”:{ “WORD3”: “ '的java'”, “word4”: “ '猪'”, “的word5”: “ '蜂巢'”, “word6”:“” RECV {“method”:“update”,“data”:{“word8”:“'learning'”,“word9”:“'studio'”) ,“word10”:“'mining'”,“morethan:shiny.number”:4}}看起来输出结果没有被发送出去任何想法? –

+0

我会更新我的回答 –

+0

我回到了“下标越界“我将尝试缩小我的示例,您将如何包含错误检查?我已经找到了一些代码,告诉我发生了什么事情,只要服务器正在发送/接收,但这就是我所遇到的全部 –