2016-08-31 122 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

當我運行我的代碼時,我得到「on」爲1,4,9,16 ...,因爲它們應該是。問題是,我也在「不」的地方「開」。例如,14應該是「off」,但是它在我的代碼中是「on」。我想知道在我的代碼中是否存在邏輯缺陷,或者僅僅是我寫錯了語法。 – morty

+0

@MinchulShin通過運行我的帖子中的代碼,它給出了「[1] 1 4 9 16 25 36 49 64 81 100」爲「on」值 – 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