我的书面R函数有一个小问题。我编写了一个小游戏,您必须猜一个数字。游戏会告诉您您的猜测是高于还是低于您要猜测的数字。如果您猜到正确的数字,游戏就会结束。
现在我不了解的事情: 当我开始游戏并在第一次迭代中输入正确的数字时,一切都很好。 但是,例如当我在第一次迭代中输入一个字符(第一个if子句会捕获该字符),然后在第二次迭代(或任何其他迭代)中输入正确的数字时,我得到了自己的错误消息,“发生未知错误”,以及来自R本身的警告“ Ingue(x):强制引入的NA”。
很显然,我的程序无法定义用户给出的数字是否等于生成的数字。至少不是每次迭代都包含第一次迭代。但是为什么呢?
有关输入高于或低于生成的数字的if子句按预期工作。
我希望有人能帮助我/向我解释我做错了:)预先感谢!
代码如下:
guess <- function(rng) {
cat("Which number are we looking for?", "\n")
a <- readline()
# print(a)
if (is.na(as.numeric(a))) {
cat("Please enter a number!", "\n")
guess(rng)
}
a <- as.numeric(a)
# cat("rng is", rng)
if (a == rng) {
return("Congratulations! You guessed right - 100 points for you!")
}
if (a < rng) {
cat("The number we are looking for is greater than your guessed number!", "\n")
guess(rng)
}
if (a > rng) {
cat("The number we are looking for is lower than you guessed number!", "\n")
guess(rng)
}
stop("Unknown error occured!")
}
guessTheNumber <- function(lower_border=1, upper_border=5) {
x <- as.numeric(sample(lower_border:upper_border, 1))
cat("The number we are looking for is", x, ".", "\n") # for testing purposes
guess(x)
}
答案 0 :(得分:0)
以防万一有人遇到类似问题:
问题出在R中的功能环境。每次调用函数时,它都会创建自己的环境(带有变量,值等)。因此,当一个函数调用自身并且被调用自身结束时,调用函数及其环境仍然处于活动状态。因此,此功能继续进行,这使我的第一个if子句变得毫无意义。这会导致字符输入出现问题。
所以问题解决了:)
答案 1 :(得分:0)
如果您会使用if-else if-else,那么它就可以正常工作
guess <- function(rng) {
cat("Which number are we looking for?", "\n")
a <- readline()
# print(a)
if (is.na(as.numeric(a))) {
cat("Please enter a number!", "\n")
guess(rng)
} else{
a <- as.numeric(a)
# cat("rng is", rng)
if (a == rng) {
return("Congratulations! You guessed right - 100 points for you!")
} else if (a < rng) {
cat("The number we are looking for is greater than your guessed number!", "\n")
guess(rng)
} else if (a > rng) {
cat("The number we are looking for is lower than you guessed number!", "\n")
guess(rng)
} else stop("Unknown error occured!")
}
}