在R中使用自己的方法创建新类时,为什么在输入对象名时不进行自动打印?

时间:2018-03-12 01:23:43

标签: r r-s3

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

我希望结果有自己的print方法,所以该值有一个新类,我定义了一个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”)

1 个答案:

答案 0 :(得分:3)

这是因为您的print.humanize()函数不会打印该值。如果你添加一行打印text并无形地返回它,它应该有效:

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