首页 > 解决方案 > ifelse 不在 BASE R 中返回向量

问题描述

也许这是一个太基本的问题。但是在下面的函数foo中,我希望由于ifelse在输入向量的输入值时使用,我会得到向量输出。

但我想知道为什么在下面的示例中> [1] 1 6,我没有输入输出,而是直接> [1] 1输出?

foo <- function(mpre = NA, mpos = NA, mdif = NA){
ifelse(!is.na(mdif), mdif, ifelse(!is.na(mpre) & !is.na(mpre) & is.na(mdif), mpos - mpre, NA))
}
## EXAMPLE:

foo(c(1,3), c(2,9))

标签: rfunctionif-statement

解决方案


ifelsetest返回与输入 ( )长度相同的输出。从?ifelse

ifelse 返回一个与 test 形状相同的值

由于mdif长度为 1,因此它返回相同长度的输出,即[1] 1. 用于if标量和ifelse向量。

foo <- function(mpre, mpos, mdif = NA){

   if(!is.na(mdif)) mdif 
     else ifelse(!is.na(mpre) & !is.na(mpre) & is.na(mdif), mpos - mpre, NA)
}

foo(c(1,3), c(2,9))
#[1] 1 6

推荐阅读