如果else语句不起作用并且无法弄清楚原因

时间:2014-08-07 19:07:37

标签: r if-statement

有人可以解释为什么我的其他部分功能无效吗?

finaltable;

Duplicate Digit6  Digit7 Digit7a Digit7b Digit7c Digit7d Dead carried
137401 137401 2017681 2017681 2018047 2018047 2018219    1       0 
137402 137402 2017731 2017731 2017856 2017856 2018279    0       0

w <- function(finaltable){
if (nchar(tail(names(finaltable),1) >= nchar(c("carried")))) {(ncol(finaltable)-2)
    } else (ncol(finaltable)-1)
}

我有colnames(重复,数字,死,携带)。我想要最后一位数字列。根据当天我将有尾部(名称(最终表),1 =携带或死亡。如果携带,我需要减去两列,如果死了然后一列。但是,我有几个名为dead或carry的列与之相关联但是,最大死亡数将是dead99。因此我最多有6个字符。

然后我想将我的功能转储到下面。

SubtractROW<-finaltable[paste(ROWS), w(finaltable)];
BarCODEtable<-cbind(ILS,ROWS,SubtractROW);
BarCODEtable;

1 个答案:

答案 0 :(得分:0)

这是你的功能,经过修正,以便返回正确的值:

w <- function(finaltable){
  if (nchar(tail(names(finaltable),1)) >= nchar("carried")) {
  (ncol(finaltable)-2)
  } else {
    ncol(finaltable)-1
  }
}

w(finaltable)  # if last column is dropped
#[1] 7

问题出在你的if语句中,)位于错误的地方。运行原始if语句会导致:

nchar(tail(names(finaltable),1) >= nchar(c("carried")))
#[1] 4  

应该在哪里

nchar(tail(names(finaltable),1)) >= nchar("carried")
#[1] FALSE

但如上所述,您可以更轻松地使用

max(which(grepl("^Digit", names(finaltable))))

代替。