我如何误解“超级任务”运算符?

时间:2016-07-19 19:00:21

标签: r debugging

使用data.tables,我有一个包含其他函数的大函数do.everything()并返回data.table。我用它运行它:

DT.processed <- do.everything(datatable = DT.unprocessed)

没有产生错误输出,但似乎某处存在隐藏错误,因为在运行first.manipulation()之后,某些NA被插入某些变量

library(data.table)
first.manipulation <- function(datatable) {
  datatable <- datatable[order(Year)]
  datatable <- datatable[Year %in% c(2001, 2002, 2003)] # for some reason, some NA appear in some variables!
  ...
  return(datatable)
}

second.manipulation <- function(datatable) {
  ...
  return(datatable)
}

do.everything <- function(datatable) {
   datatable <- first.manipulation(datatable = datatable)
   datatable <- second.manipulation(datatable = datatable)
   return(datatable)
}

因此first.manipulation()似乎存在问题。

为了解决这个问题,我重写了它,以便在每个命令之前/之后导出datatable的状态,并确定导致这个“NA插入”问题的原因:

first.manipulation <- function(datatable) {
  datatable.step.1 <<- datatable
  datatable <- datatable[order(Year)]
  datatable.step.2 <<- datatable
  datatable <- datatable[Year %in% c(2001, 2002, 2003)]
  datatable.step.3 <<- datatable
  return(datatable)
}

我发现datatable.step.1 datatable.step.2datatable.step.3都没有“NA问题”,但first.manipulation <- function(datatable) { datatable.step.1 <<- datatable datatable <- datatable[order(Year)] datatable.step.2 <<- datatable print(colSums(is.na(datatable))) datatable.step.2.debug.1 <<- datatable.step.2 datatable.step.2.debug.2 <<- datatable.step.2.debug.1[Year %in% c(2001, 2002, 2003)] datatable <- datatable[Year %in% c(2001, 2002, 2003)] datatable.step.3 <<- datatable print(colSums(is.na(datatable))) return(datatable) } 确实存在“NA问题”。我无法理解为什么会这样,所以我把它改写成:

datatable.step.3

问题是即使在此之后, datatable.step.2.debug.2datatable.step.3不同。 datatable.step.2.debug.2表示“NA问题”,而print(colSums(is.na(datatable)))没有表示。

为什么会这样?

其次,两个0,在任何地方都返回print(),而第二个datatable = datatable显然有NAs。这是预期的吗?

最后,在do.everything()的定义中使用{{1}}是一种好习惯吗? 显然,我对任何其他建议持开放态度。

0 个答案:

没有答案