2016-08-31 9 views
1

Rを使ってクイズを解決しようとしていますが、コードが正しく動作しません。私はデバッグを試みましたが、ifelseステートメントがかなりランダムなような特定の数値では動作しないようです。ここでR:文字のベクトルにifelse文を使用する方法

はクイズです:http://puzzles.nigelcoldwell.co.uk/six.htm

switches <- rep("off", 100) 
for(i in 1:100){ 
    k <- c(seq(i, 100, i)) 
    ifelse(switches[k] == "off", switches[k] <- "on", switches[k] <- "off") 
} 

私はこのコードを実行すると、私はなど14、22、26、30、34、のために私が持っているべきでは "オン" を取得 "オフ。"ベクトル化されたインデックスを持つベクトルにifelseステートメントを適用する方法に間違いがありますか?

答えて

1

ifelse構文はあなたがバイナリ問題を抱えている

switches <- rep("off", 100) 
for(i in 1:100){ 
    k <- seq(i, 100, i) 
    switches[k] <- ifelse(switches[k] == "off", "on", "off") 
} 
+0

私のコードを実行すると、1、4、9、16、...のように "on"になります。問題は、私がやらなければならないところで私が "オン"になるということです。たとえば、14は "オフ"にする必要がありますが、コード内では "オン"です。私のコードに論理的な欠陥があるのか​​、それとも単に誤った構文で書いたのかと疑問に思います。 – morty

+0

@MinchulShin私のポストでコードを実行すると、 "on"値に '[1] 1 4 9 16 25 36 49 64 81 100'が返されます – akrun

+0

@MinchulShinまた、出力に基づいて、これは' switches [ 1:10)^ 2] < - "on" ' – akrun

1

でなければなりません。 ifelseを使用する理由はありません。論理値での作業:

bulbs <- rep(FALSE, 100) 
for (i in 1:100) bulbs[!((1:100) %% i)] <- !bulbs[!((1:100) %% i)] 
which(bulbs) 
#[1] 1 4 9 16 25 36 49 64 81 100 
関連する問題