r - 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))
解决方案
ifelse
test
返回与输入 ( )长度相同的输出。从?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
推荐阅读
- android - Android ImageView程序,如何根据随机函数设置imageview
- c - 我的最终功能不会返回
- xcode - 没有故事板的编码
- excel - 代码似乎永远运行并且错误:未设置块变量(VBA)
- jersey-2.0 - 带有 Guice 的 Jersey 2.27 - 没有 HK2-guice 桥是否支持
- android - Android Place.getLocale() 返回 null
- google-cloud-platform - 我可以在不同的 Google Cloud 项目中使用 Google Cloud Pub/Sub 吗?
- php - 解析后PHP XML解析器CDATA关键字丢失
- linux - 如何以管理员身份在远程 Windows 机器上运行 ansible playbook 并输出日志
- android - 使用cordova在android中监听指纹