如何在这个R函数中使用if
只允许输入u和v的正整数?
pierpont <- function(pp){
var1 <- readline(prompt = "Enter u value:");
var2 <- readline(prompt = "Enter v value:");
var1 <-as.numeric(var1);
var2 <-as.numeric(var2);
c((2^var1)*(3^var2)+1)
}
新建计划,检查输入是否为整数并>0,然后返回结果
pierpont <- function() {
var1 <- as.numeric(readline(prompt = "Enter u value:"))
var2 <- as.numeric(readline(prompt = "Enter v value:"))
if (!is.na(var1) & !is.na(var2) &
(var1 %% 1 == 0) & (var1 > 0) &
(var2 %% 1 == 0) & (var2 > 0)) {
(2^var1)*(3^var2)+1
} else {
"wroooong"
}
}
您可以使用while
等待输入满足条件,并使用type.convert
将输入转换为适当的类型。
pierpont <- function(pp) {
var1 <- NA
while(!is.integer(var1) | var1 < 1) {
var1 <- type.convert(readline(prompt = "Enter u value (positive integer): "), as.is=TRUE)}
var2 <- NA
while(!is.integer(var2) | var2 < 1) {
var2 <- type.convert(readline(prompt = "Enter v value (positive integer): "), as.is=TRUE)}
(2^var1)*(3^var2)+1
}
或者如果条件不满足则返回NA
:
pierpont <- function(pp) {
var1 <- type.convert(readline(prompt = "Enter u value (positive integer): "), as.is=TRUE)
var2 <- type.convert(readline(prompt = "Enter v value (positive integer): "), as.is=TRUE)
if(is.integer(var1) & is.integer(var2) & var1 > 0 & var2 > 0) {
(2^var1)*(3^var2)+1
} else {
NA
}
}
您可以通过检查它们是否与正整数值相同来测试它们都是正整数的假设:
pierpont <- function(pp){
var1 <- readline(prompt = "Enter u value:");
var2 <- readline(prompt = "Enter v value:");
if(abs(as.integer(var1)+as.integer(var2))==var1+var2){
return(c((2^var1)*(3^var2)+1))
}else{return(NA)}
}