2017-01-31 14 views
1

質問銀行の基本的な統計質問を作成するファイルを作成する必要があります。if文が句に対応していないというエラー

私は、for文の各サイクルでデータセットが作成され、次に単一の周波数ベクトルに変換されるスクリプトをrで書いた。次に、サイクル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

私はJanのコメントによって導かれた私の質問を解決しました。

問題:j変数が2ことになって、機能の場合if (j==2)戻りFALSE ...

観察: j<-((1:5)/3-trunc((1:5)/3))*3[1] 0 1 2 0 1を返す必要がありますが、それは同じですが、unnoticeably丸められていないを返しているように見えます。

解決方法: j<-round((i/3-trunc(i/3))*3,1)に変更しました。

+0

まだJanが誰であるか把握しようとしています。 –

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() 

次に、残りのコードを実行してください。

+0

ありがとうございましたJan.それはうまくいきませんでした。なぜなら、問題はANSWER変数ではなくif文であるからです。なんらかの理由で、5回目の反復で正常に動作しなくなります... –

+0

「動作しませんでした」ということをさらに詳しく記述する必要があります。 'i/3-trunc((1:5)/ 3))* 3'は' [1] 'を返します。 10 10 7 7 7 'である。 –

+0

"うまくいきませんでした"とは、j変数が3の場合、if関数 "j == 3"がfalseと宣言していることを意味します...しかし、あなたは正しい場所を指していました: 'j < - ((1:5)/ 3-trunc((1:5)/ 3))* 3'は '[1] 0 1 2 0 1'を返すべきですが、私はそれを 'j-around((i-3-trunc(i/3))* 3,1)'に変更しました。 –

関連する問題