R Ifelse语句语法多个条件被破坏

R Ifelse语句语法多个条件被破坏,r,if-statement,R,If Statement,我在使用嵌套的ifelse语句时遇到一些问题。我编写了以下代码。它应该强制一个正确或错误,但我得到一些NAs。你能帮我找出它坏在哪里吗 数据看起来像 Name<- c(Jon,Jim,Jake,Jess,Jill,Jay,Jason) LinkFlag<- c( NA, NA, NA, NA, NA, NA, NA) 1<- c(1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) 2<- c(2.5, NA, NA, NA, NA, 3.

我在使用嵌套的ifelse语句时遇到一些问题。我编写了以下代码。它应该强制一个正确或错误,但我得到一些NAs。你能帮我找出它坏在哪里吗

数据看起来像

Name<- c(Jon,Jim,Jake,Jess,Jill,Jay,Jason)
LinkFlag<- c( NA,  NA,  NA,  NA,  NA, NA, NA)
1<- c(1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0)
2<- c(2.5,  NA,  NA,  NA,  NA, 3.0,  NA)

spread_wide<-c(Name,LinkFlag,1,2)

Name您基本上有一组二进制检查,每个检查返回
TRUE
,或者
FALSE
,如果它们都不为TRUE。因此,只需将所有检查一起制作一个
矩阵
列表
,就很简单了:

checks <- with(spread_wide,
  cbind(
    `1` == 99,
    `1` == `2` - 1,
    is.na(`2`),
    `2` == 99,
    `1` == (`2` - 0.5),
    `1` == `2`,
    LinkFlag == 'FlagforSkip'
  )
)

rowSums(checks, na.rm=TRUE) > 0
#[1] FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE

为什么不使用Switch语句呢?如果你想使用if-else,在它们之间留出一些空间,就像if-else,使用正确的“if{}else if{}”语法,因为“ifelse ifelse”不是正确的语法。许多嵌套的
ifelse
语句通常会导致难以跟踪的错误。最好用您试图实现的目标的描述来更新您的问题,因为无疑会有更好的方法来做到这一点。@Aaqib
ifelse
在R中是一个方便的函数,因此语法不是问题,但是的,这么多嵌套的
ifelse
可能不是一个好主意。@用户下次将密切关注ifelse。这是什么
1
checks <- with(spread_wide,
  cbind(
    `1` == 99,
    `1` == `2` - 1,
    is.na(`2`),
    `2` == 99,
    `1` == (`2` - 0.5),
    `1` == `2`,
    LinkFlag == 'FlagforSkip'
  )
)

rowSums(checks, na.rm=TRUE) > 0
#[1] FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
Name<- c("Jon","Jim","Jake","Jess","Jill","Jay","Jason")
LinkFlag<- c( NA,  NA,  NA,  NA,  NA, NA, NA)
`1` <- c(1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0)
`2` <- c(2.5,  NA,  NA,  NA,  NA, 3.0,  NA)
spread_wide<- data.frame(Name,LinkFlag,`1`,`2`,check.names=FALSE)