2

我正在尝试构建我的第一个 R 包。我从一个简单的项目开始,它需要一个日期并将其“人性化”为“X [时间单位] 前”的格式(例如,“3 天前”、“4 年前”等)。

我希望结果有自己的打印方法,所以值有一个新类,我定义了一个 print.classname 函数。

当我运行我的新功能并输入时print(object),它按预期工作。但是当我刚进入时object,什么都没有显示。这可能是什么原因造成的?这是函数和方法的简化版本:

humanize.now <- function(t) {
  now<-Sys.time()
  timediff<-diff(c(as.POSIXct(t), now))
  answer<-as.numeric(timediff)
  attributes(answer)<- list(unit=attributes(timediff)$units)
  answer<-trunc(answer)
  class(answer)<- "humanize"
  return(answer)
}

print.humanize <- function(h) {
  text<-paste0(h," ",attributes(h)$unit," ago")
  text
}

(更新:编辑了 humanize.now 函数,因为我对其的缩写引入了一个错误。现在生成的对象应该属于“humanize”类)

4

1 回答 1

4

这是因为您的print.humanize()函数不打印该值。如果您添加一行打印text并以不可见的方式返回它,它应该可以工作:

print.humanize <- function(h) {
  text <- paste0(h, " ", attributes(h)$unit, " ago")
  print(text)
  invisible(text)
}
于 2018-03-12T01:40:04.450 回答