R 逻辑计算不正确?

R 逻辑计算不正确?,r,function,if-statement,R,Function,If Statement,我想知道为什么我的第一个if语句返回Error,而我的输入数据是类numeric的对象 我已经清楚地说明了第一个if语句只有在dataclass是“data.frame”时才打开,但是当data class是numeric时,第一个if语句返回错误!我有什么遗漏吗 更新: 我已将&的实例更改为&,但当数据是data.frame时,函数不会产生任何输出?例如,运行:standard(mtcars) 标准1){ 数据[paste0(名称(数据),“.s”)] 我有什么遗漏吗 &计算这两个元素,而&不

我想知道为什么我的第一个
if
语句返回
Error
,而我的输入数据是类
numeric
的对象

我已经清楚地说明了第一个
if
语句只有在data
class
“data.frame”
时才打开,但是当data class是
numeric
时,第一个
if
语句返回错误!我有什么遗漏吗

更新:

我已将
&
的实例更改为
&
,但当数据是
data.frame
时,函数不会产生任何输出?例如,运行:
standard(mtcars)

标准1){
数据[paste0(名称(数据),“.s”)]
我有什么遗漏吗

&
计算这两个元素,而
&
不计算这两个元素

FALSE&停止(“boh”)
#R> [1]错误
正确和停止(“boh”)
#R> 错误:boh
错误和停止(“boh”)
#R> 错误:boh
请参阅帮助(“逻辑”)

&
&
表示逻辑and,而
|
表示逻辑OR。较短的形式执行元素级比较的方式与算术运算符基本相同。较长的形式从左到右求值只检查每个向量的第一个元素。求值继续进行仅在确定结果之前


编辑后 您不会得到任何结果,因为您没有调用
return
或使用
if-else
。请参阅
help(“函数”)
help(“if”)
。下面是一个小示例

f1 <- function(x){
  if(x < 0){
    x <- -1
    x
  }

  if(x > 0){
    x <- 1
    x
  }
}
f1(-1)

f2 <- function(x){
  if(x < 0){
    x <- -1
    x
  }
  else if(x > 0){
    x <- 1
    x
  }
}
f2(-1)
#R> [1] -1

f3 <- function(x){
  if(x < 0){
    x <- -1
    return(x)
  }

  if(x > 0){
    x <- 1
    return(x)
  }
}
f3(-1)
#R> [1] -1

f1tl;dr在执行流控制时,您应该使用
&
而不是
&
,因为
&
始终计算其第二个参数,而
&
如果第一个参数为false,则短路。如果参数不是数据帧(或矩阵),则
ncol(x)
没有意义:有关更多信息,请参见例如

继续,用一个简单的例子来解包

x <- 1:5
(但请注意,您必须小心,因为
class(x)
可能是包含多个元素的向量:
继承(x,“data.frame”)
更安全)

第二部分是问题产生的原因:

ncol(x) ## NULL (uh-oh)
ncol(x)>1  ## numeric(0) (uh-oh)
把它们放在一起:

class(x)=="data.frame" & ncol(x)>1  ## logical(0)
这有什么用

if (logical(0)) print("hello")
if(逻辑(0))打印(“hello”)时出错:参数的长度为零


如果第一个元素是
TRUE
,它就有意义。我想你可能不明白@BenjaminChristofferson和我想说的关于“短路”的内容。问题是
ncol(x)
如果
x
不是一个数据帧或矩阵,那么对这个参数进行评估(并将其包含在逻辑语句中)是没有意义的造成麻烦[正如您发现的那样]因为它不属于您问题的范围,所以我没有在第一条逻辑语句之外查看函数…也许将一些显式的
return()
语句放入其中会有所帮助。最好不要在一篇文章中问多个问题,所以。。。
class(x)=="data.frame" & ncol(x)>1  ## logical(0)
if (logical(0)) print("hello")