我需要制作一个文件,为问题库编写基本的统计问题。
我在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)
}
答案 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)
并且有效!