【问题标题】:If else statement doesnt work and cant figure out whyif else 语句不起作用并且无法弄清楚原因
【发布时间】:2014-08-07 19:07:36
【问题描述】:

有人可以解释为什么我的 else 部分功能不起作用吗?

最终结果;

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)
}

我有列名(重复、数字、死亡、携带)。我想要最后一位数字列。根据我将有tail(names(finaltable),1 =携带或死亡的日子。如果携带,我需要减去两列,如果死亡则减去一列。但是,我有几列命名为死亡或携带与相关联数字。但是,最大死数是 dead99。因此我最多有 6 个字符。

然后我想将我的函数转储到下面。

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

【问题讨论】:

  • 如果要查找列名中包含“数字”的最后一列,可以使用max(which(grepl("^Digit", names(finaltable)))) 而不是 if else。
  • @beginneR,这是什么意思? “^数字”?
  • @另外,你能解释一下我的函数有什么问题吗?
  • 也就是说,检查列名是否以“数字”开头(^用来表示应该在开头找到字符串)。
  • 您的功能似乎运行良好。当我运行它时,它返回 7 - 这对于示例数据是正确的。

标签: r if-statement


【解决方案1】:

这是您的函数,已更正以返回正确的值:

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))))

改为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    相关资源
    最近更新 更多