R:如何对字符向量使用ifelse语句

时间:2016-08-31 07:05:05

标签: r debugging control-flow

我正在尝试使用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语句应用于具有矢量化索引的向量的方式是否存在错误?

2 个答案:

答案 0 :(得分:1)

ifelse语法应为

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

答案 1 :(得分: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