有人可以解释为什么我的其他部分功能无效吗?
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;
答案 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))))
代替。