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

R: How to use ifelse statement for a vector of characters

我正在尝试使用 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")
}

当我 运行 这段代码时,我得到 "on" 14、22、26、30、34 等我应该得到 "off." 是否有错误我将 ifelse 语句应用于具有矢量化索引的矢量的方式?

ifelse 语法应该是

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

你有一个二进制问题。没有理由使用 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