if语句中的错误不响应子句

时间:2017-01-31 00:33:54

标签: r if-statement for-loop

我需要制作一个文件,为问题库编写基本的统计问题。

我在r中编写了一个脚本,其中在for语句的每个循环中创建一个数据集,然后将其转换为单个频率向量。然后用以下模式选择一个问题:循环1中的“q1”,循环2中的“q2”,循环3中的“q3”,循环4中的“q1”,循环5中的“q2”等。执行此操作通过if语句。

将问题和答案写入以日期命名的文件中。

问题是答案是错误的,程序有时保留最后一个值,我无法弄明白为什么。这是一个示例输出:

我正在使用的代码如下:

Aaa <- function() 
{ 
  Qt  <<- readline(prompt="Iterations:")  
  } 

Aaa() 

##### Create file to sink to:#################
Date.<-Sys.Date()
Date.<-format(Date., format="%Y%m%d")
Archivo<- paste(Date.,".txt",sep="")

##### Create iterations ######################

sink(Archivo, append=FALSE)
cat("PRUEBA")
cat("\n")
sink(NULL)

for (i in 1:Qt){
  j<-(i/3-trunc(i/3))*3  

sink(Archivo, append=TRUE)

##### Generación de variables y cálculos #####  

  x<-round(rnorm(400,55,12),0)

  cuts<-seq(10.5,100.5,9)
  x<-x[x>10]
  x<-x[x<101]
  Table.<-hist(x,breaks = cuts,plot = FALSE)$counts
  Class. <- sample(3:9,1)

if (j==0) {
  Qstn <- paste("What is cum sum for class ",Class.,"?",sep="")
  Answ<-cumsum(Table.)[Class.]
} else if (j==1) {
  Qstn <- paste("What % of data corresponds to class ",Class.,"?",sep="")
  Answ<-Table.[Class.]/sum(Table.)*100 
} else if (j==2) {
  Qstn <- paste("Cummulative percent for class ",Class.,"?",sep="")
  Answ<-cumsum(Table.)[Class.]/length(x)*100 
}

##### List of questions #####
  cat(Table.,sep=", ")
    cat("\nQuestion ",i,":\n", 
      Qstn,"?\n",
    "=",Answ,"\n",
    "\n\n\n",
    sep="")

sink(NULL)
}

2 个答案:

答案 0 :(得分:0)

如果您创建一个名为Qt的数据对象,并使用字符向量填充它,那么您可能会感到惊讶:

Error in 1:Qt : NA/NaN argument

首先运行这样的事情:

Aaa <- function() {
  repeat( { ANSWER <- readline("Iterations:")
  if ( as.numeric(ANSWER)  >= 1){Qt <<- as.numeric(ANSWER)
        break} })}

然后运行:

Aaa()

然后运行剩下的代码。

答案 1 :(得分:0)

我在Jan的评论中解决了我的问题。

问题:当j变量应该是2时,if函数if (j==2)返回FALSE ...

观察: j<-((1:5)/3-trunc((1:5)/3))*3应该返回[1] 0 1 2 0 1,但它似乎返回相同但不明显的地方。

解决方案: 我将其更改为j<-round((i/3-trunc(i/3))*3,1)并且有效!