因此,我正在编写一个应用程序,让用户输入一些涉及矩阵的基本运算。在一个部分,他们被要求“返回”整个矩阵,就像他们在基数R中一样,对于这个矩阵,他们可以“调用”具有1:5,1:5行和列的矩阵,或者简单地输入矩阵的名称(例如my.matrix)。但是,我无法运行第二部分,因为应用程序将崩溃并返回以下错误: Error in ::NA/NaN参数。我在服务器中包含了此特定部分的代码段:
observeEvent( input$go6, {
sixthinput<- as.numeric(str_extract_all(input$six, "[0-9]+")[[1]])
string6 <- str_extract(input$six, "my.matrix")
sixth.list <- my.matrix[sixthinput[1]:sixthinput[2],sixthinput[3]:sixthinput[4]]
isolate({
buttonValue$go1 = FALSE
buttonValue$go2 = FALSE
buttonValue$go3 = FALSE
buttonValue$go4 = FALSE
buttonValue$go5 = FALSE
buttonValue$go6 = TRUE
buttonValue$go7 = FALSE
})
comparestring <- "my.matrix"
if (isTRUE(identical(sixth.list, my.matrix)) & buttonValue$go6) {
output$display <- renderText({
paste(c("The matrix you extracted contains:"))
})
output$displayMat <- renderTable(
sixth.list
)
output$display2 <- renderText({
print("Correct!")
})
} else if(isTRUE(identical(string6, comparestring)) & buttonValue$go6) {
output$display <- renderText({
paste(c("The matrix you extracted contains:"))
})
output$displayMat <- renderTable(
my.matrix
)
output$display2 <- renderText({
print("Correct!")
})
} else {
output$display <- renderText({
paste(c("The matrix you extracted contains:"))
})
output$displayMat <- renderTable(
sixth.list
)
output$display2 <- renderText({
print("Incorrect")
})
}
})我确信它与变量"string6“、"comparestring”和/或我在if循环中比较它们的部分有关,但我不确定错误的确切位置/错误程度,除了NA。任何澄清都是非常感谢的。
发布于 2019-02-21 07:05:53
问题出在以下几行中:
sixthinput<- as.numeric(str_extract_all(input$six, "[0-9]+")[[1]])
string6 <- str_extract(input$six, "my.matrix")
sixth.list <- my.matrix[sixthinput[1]:sixthinput[2],sixthinput[3]:sixthinput[4]]当用户输入不带子集运算符([)的my.matrix时,sixthinput的值将为numeric(0),因为没有匹配的数字。sixthinput[1]的值将是NA,因此您不能通过NA来设置my.matrix的子集。避免错误的最简单方法是检查该length(sixthinput) == 4,如果不是,则避免设置my.matrix子集。
https://stackoverflow.com/questions/54791675
复制相似问题