运行R语言自定义MMod函数时报unexpected symbol错误如何解决
错误产生原因
R的语法要求同一行内的多个独立语句必须用分号分隔,否则解析器会把连续的标识符识别为无效的语法组合。你给出的代码里,函数体第一行{cumul<-0 i<-1 istate<-Init m<-measure*cycle连续写了4个赋值语句,没有任何分隔符,解析到cumul<-0之后的i时无法识别为合法语法,就抛出了unexpected symbol的错误。
修复方案
两种修改方式二选一即可:
方式1:给同一行的多个语句加分号分隔
MMod<-function (Pmat, cycle, n, Init, halfcycle=F, measure, discount=.03) {cumul<-0; i<-1; istate<-Init; m<-measure*cycle if (halfcycle) {cumul<-0.5*(Init%*%m)} while (i <= n) { istate<-istate%*%Pmat imeasure<-istate%*%m cumul<-cumul+imeasure #print(paste(c(i,round(istate,2),cumul))) i<-i+1 m<-m*(1-discount*cycle) } if (halfcycle) {cumul<-cumul - 0.5*imeasure} return(cumul)}
方式2(更推荐,可读性更高):把独立语句拆分为不同行,同时规范代码缩进
MMod <- function(Pmat, cycle, n, Init, halfcycle = F, measure, discount = .03) { cumul <- 0 i <- 1 istate <- Init m <- measure * cycle if (halfcycle) { cumul <- 0.5 * (Init %*% m) } while (i <= n) { istate <- istate %*% Pmat imeasure <- istate %*% m cumul <- cumul + imeasure # print(paste(c(i, round(istate, 2), cumul))) i <- i + 1 m <- m * (1 - discount * cycle) } if (halfcycle) { cumul <- cumul - 0.5 * imeasure } return(cumul) }
修复后该语法报错就会消失,之后如果有其他报错再排查逻辑、参数传入等问题即可。
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

