将is.numeric输出写入函数
我有一个非常简单的问题。我想创建一个函数,如果有一个正数值对象,则返回将is.numeric输出写入函数,r,if-statement,boolean,R,If Statement,Boolean,我有一个非常简单的问题。我想创建一个函数,如果有一个正数值对象,则返回TRUE;如果没有,则返回FALSE;如果对象是一个字符向量,则返回“插入一个数字”。我写道: check.positive<-function(x){ if(all(x>=0)){ cat("TRUE") }else if(all(x<0)){ cat("FALSE") }else if(is.numeric(x)==FALSE){
TRUE
;如果没有,则返回FALSE
;如果对象是一个字符向量,则返回“插入一个数字”
。我写道:
check.positive<-function(x){
if(all(x>=0)){
cat("TRUE")
}else if(all(x<0)){
cat("FALSE")
}else if(is.numeric(x)==FALSE){
cat("Insert a number")
}
}
check.positive=0){
猫(“真”)
}else if(全部)(x
改变顺序。请注意,“A”>0
返回TRUE
。这是因为在编程过程中,所有字符都被分配了一个数值,因此字符串只是一个数值向量(从编程的角度来看)。因此,所有类型检查都应该首先在函数中进行(这也是良好的编程实践):
check.positive=0))
猫(“真”)
else if(全部(x<0))
猫(“假”)
}
改变顺序。请注意,“A”>0
返回TRUE
。这是因为在编程过程中,所有字符都被分配了一个数值,因此字符串只是一个数值向量(从编程的角度来看)。因此,所有类型检查都应该首先在函数中进行(这也是良好的编程实践):
check.positive=0))
猫(“真”)
else if(全部(x<0))
猫(“假”)
}
谢谢大家。执行您的所有建议(返回结果,而不仅仅是打印、更改顺序等),我得到:
check.positive谢谢大家。执行您的所有建议(返回结果,而不仅仅是打印、更改顺序等),我得到:
check.positive您应该首先检查x是否为数字,因为比较只对数字变量有意义,而不是为.numeric(x)=FALSE
,您可以简单地使用!is.numeric(x)
。您说过要创建一个返回值的函数……但是您显示的代码不返回任何值,它只打印结果。(一般来说,这不是很有用;返回结果通常是您想要做的。)您应该首先检查x是否是数字,因为您所做的比较仅对数字变量有意义,而不是是。数字(x)=FALSE
,您可以简单地使用!is.numeric(x)
。您说过要创建一个返回值的函数……但是您显示的代码不返回任何值,它只打印结果。(一般来说,这不是很有用;返回结果通常是你想要做的。)在答案中添加文本来解释逻辑,对于回答问题的人和寻找类似问题解决方案的未来用户来说,这将非常有用。这并不需要太多,只有1-2行可以帮助一吨!在您的答案中添加文本来解释逻辑,对于回答问题的人和寻找类似问题解决方案的未来用户来说,这些文本将非常有用。这并不需要太多,只有1-2行可以帮助一吨!谢谢你,奥利弗,我不知道这会很有用的!一个简短的问题:我注意到你没有使用{}括号,有什么特别的原因吗?我试过了,有括号和没有括号都能用。我很乐意。它是特定于编程的。在R(和C++)中,如果语句只影响下一行(或当前行),则可以省略括号。例如if(假)打印(“你好世界”);print(“我不是该语句的一部分”)
将只打印后者(;
表示R中语句的结尾)。如果受If
/函数
语句影响的对象不止一个,则需要大括号。:-)注意:如果您有嵌套条件(如果有2个或更多的if-else
),则可能会使人混淆。因此,总的来说,我建议严格使用括号。即使在你经历了几年之后,它也会导致非常令人困惑的(意想不到的)行为。非常感谢你的解释!谢谢你,奥利弗,我不知道这会很有用的!一个简短的问题:我注意到你没有使用{}括号,有什么特别的原因吗?我试过了,有括号和没有括号都能用。我很乐意。它是特定于编程的。在R(和C++)中,如果语句只影响下一行(或当前行),则可以省略括号。例如if(假)打印(“你好世界”);print(“我不是该语句的一部分”)
将只打印后者(;
表示R中语句的结尾)。如果受If
/函数
语句影响的对象不止一个,则需要大括号。:-)注意:如果您有嵌套条件(如果有2个或更多的if-else
),则可能会使人混淆。因此,总的来说,我建议严格使用括号。即使在你经历了几年之后,它也会导致非常令人困惑的(意想不到的)行为。非常感谢你的解释!通常在“典型”中,R代码不会在分支内部执行赋值,如果分支,则在外部执行赋值。(即,result=if(…)a else if(…)b else c
)。此外,这里不需要调用return
函数,您可以直接返回结果。这反过来意味着结果
变量是冗余的。因此,惯用的解决方案如下:check_positive=function(x){if(!is.numeric(x))'insert a number'else if(all(x>=0))'TRUE'else'FALSE'}
-此外,通常,返回一个逻辑值比返回一个字符串更有帮助……但是如果返回一个逻辑值,则不清楚如何表示第一种情况。一种解决方案是返回NA
。这最终取决于该函数的实际使用方式。最后一点注意:当函数名描述函数的功能时,它们更具可读性<代码>检查。肯定的
不太具有描述性<代码>为正更好(但它必须返回一个逻辑值,返回字符串会使该名称产生误导)。我想不出这个函数返回stri的好名字
check.positive<-function(x){
if(is.numeric(x)){
if(all(x>=0)){
cat("TRUE")
}else if(all(x<0)){
cat("FALSE")}
}else{
cat("Insert a number")
}
}
> check.positive("c")
Insert a number
> check.positive(1)
TRUE
> check.positive(-2)
FALSE
check.positive <- function(x){
if(!is.numeric(x))
cat("Insert a number")
else if(all(x >= 0))
cat("TRUE")
else if(all(x < 0))
cat("FALSE")
}
check.positive <- function(x){
if(!is.numeric(x)){
result<-"Insert a number"
}else if(all(x >= 0)){
result<-"TRUE"
}else if(all(x < 0)){
result<-"FALSE"
}
return(result)
}