Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 为什么ifelse()返回单值输出?_R - Fatal编程技术网

R 为什么ifelse()返回单值输出?

R 为什么ifelse()返回单值输出?,r,R,这两个函数应该给出相似的结果,不是吗 f1 <- function(x, y) { if (missing(y)) { out <- x } else { out <- c(x, y) } return(out) } f2 <- function(x, y) ifelse(missing(y), x, c(x, y)) 这与缺失无关,而是与错误使用ifelse有关。从帮助(“ifelse”): ifelse返回与test

这两个函数应该给出相似的结果,不是吗

f1 <- function(x, y) {
   if (missing(y)) {
      out <- x
   } else {
      out <- c(x, y)
   }
   return(out)
}

f2 <- function(x, y) ifelse(missing(y), x, c(x, y))

这与
缺失
无关,而是与错误使用
ifelse
有关。从
帮助(“ifelse”)

ifelse
返回与
test
形状相同的值,该值由
yes
no
中选择的元素填充,具体取决于
test
的元素是
TRUE
还是
FALSE


测试的“形状”是一个长度为1的向量。因此,返回长度为1的向量
ifelse
不仅仅是与
if
else
不同的语法相同的结果出现在函数之外:

> ifelse(FALSE, 1, c(1, 2))
[1] 1
函数
ifelse
设计用于矢量化参数。它测试arg1的第一个元素,如果为true,则返回arg2的第一个元素,如果为false,则返回arg3的第一个元素。在本例中,它忽略arg3的尾部元素,只返回第一个元素,这相当于本例中的
TRUE
值,这是容易混淆的部分。更清楚的是,不同的论点是怎么回事:

> ifelse(FALSE, 1, c(2, 3))
[1] 2

> ifelse(c(FALSE, FALSE), 1, c(2,3))
[1] 2 3

重要的是要记住,一切(偶数长度1)都是R中的向量,有些函数单独处理每个元素(“向量化”函数),有些函数作为一个整体处理向量。

答案有用吗?我无法解释为什么,但是如果你在
f2
中包含
return
语句,你会得到相同的结果:
f2@DavidArenburg我会犹豫是否以重复的形式结束(尽管如果可以,我可能会投赞成票),因为从问题中根本看不出它们是重复的,而只是从答案中(这不便于搜索)。我认为这个问题比另一个问题更明显。@Roland,那么可以相应地编辑Qs标题吗?我不认为
丢失
是应该做的事here@DavidArenburg罗兰-我把标题改得更具描述性。
> ifelse(FALSE, 1, c(2, 3))
[1] 2

> ifelse(c(FALSE, FALSE), 1, c(2,3))
[1] 2 3