$运算符对Shiny中的原子向量无效

时间:2017-12-04 02:47:17

标签: r shiny

我有以下代码在R解释器中按预期工作

recodeRule <- function(df, rules){
    for(i in 1:nrow(rules)){
        x <- which(df$key == rules$key[i] & df$score == rules[i, 'before'])
        df[x, 'score'] <- rules[i, 'after'] 
    }
    df
}
df <- data.frame(key = c(1,2,3,1,2,3), score = c(1,1,2,2,1,1))
rules <- data.frame(key = c(1,2), before = c(1,1), after = c(10,12))
recodeRule(df, rules)

然而,当我的Shiny应用程序中放置相同的代码时,我得到&#34; $运算符对原子向量无效#34;。追溯显示:

Stack trace (innermost first):
    113: which [Rcode/serverFiles/testScoring.R#30]
    112: recodeRule [Rcode/serverFiles/testScoring.R#30]
    111: <reactive:stuItems4Scoring> [Rcode/serverFiles/testScoring.R#35]
    100: stuItems4Scoring
     99: get
     98: <reactive:dimVarNms> [Rcode/serverFiles/testScoring.R#132]
     87: dimVarNms
     86: lapply
     85: listify
     84: choicesWithNames
     83: selectInput
     82: tagAppendChild
     81: selectizeIt
     80: selectizeInput
     79: renderUI [Rcode/serverFiles/testScoring.R#137]
     78: func
     77: origRenderFunc
     76: output$dimVars4Scoring
      1: runApp

该函数嵌入在此反应式表达式中。此函数的预期行为是读入并返回文件。如果读入第二个文件,它将修改该文件并返回它。

stuItems4Scoring <- reactive({
    validate(need(input$stuItems4Scoring != "", ""))    
    infile <- input$stuItems4Scoring
    if (!is.null(input$stuItems4Scoring)) {
        file <- load(input$stuItems4Scoring$datapath, e6)
    }
    ### Apply recode if requested
    if(!is.null(input$recodeRules)){
        rules <- recodeFile()
        file <- recodeRule(file, rules)
        return(file)
    } else {
        file
    }   
})

以及在rules文件中读取的代码部分如下:

recodeFile <- reactive({
    validate(need(input$recodeRules != "", "")) 
    infile <- input$recodeRules
    if (is.null(infile)) return(NULL)      
    read.csv(infile$datapath)
})

如果我没有在recodeFile中阅读,那么实际应用程序的相关部分将按预期工作,因为返回原始daatframe。但是,当我在recodeFile中读到时,它应该发生什么呢?它应该修改数据(如上面提供的工作示例,在R解释器中工作)并返回修改后的文件。这是我的代码失败的地方,我不确定原因。

回溯表明有问题的代码行位于which函数中的recodeRule语句中,但我根本没有看到原因,因为我有点在此时杂草丛生。

感谢您的支持。

1 个答案:

答案 0 :(得分:0)

我在使用rgl软件包的Shiny中遇到了类似的问题。我在server.R和ui.r文件的rglwidgetOutput()中使用了renderRglwidget()函数。 然后,通过在renderRglwidget()函数的expr参数的末尾添加一行来解决此问题。该行是:rglwidget()