为什么' difftime '从R中的其他变量携带标签属性?



在下面的例子中,我使用Hmisc(可以是labelled包无关紧要)为日期变量创建了一个标签。在第二个数据集中,我使用difftime来取两个日期之间的差。在新列上运行属性时,标签from dates(提供给difftime的第一个变量)将被保留。为什么这个属性会被延续?

library(Hmisc)

trial <- data.frame(dates = seq(as.Date("1970-01-01"), as.Date("1970-01-01")+199,1),
dates2 = sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day"), 200))
Hmisc::label(trial$dates) <- "New Date"

trial2 <- transform(trial, difftimer = difftime(dates,dates2))
attributes(trial2$difftimer)

difftime呼叫.difftime,源代码为

.difftime
function (xx, units, cl = "difftime") 
{
class(xx) <- cl
attr(xx, "units") <- units
xx
}

它只是添加/更新属性,即classunits,除了已经存在的属性。这个变化是在class中,因为它被分配给新的

attributes(trial$dates2) # // starts with class only attributes
#$class
#[1] "Date"
attributes(.difftime(trial$dates2, units = 'secs')) # //updated class
#$class
#[1] "difftime"
#$units # // added new attribute
#[1] "secs"

对于'dates'列,有两个类和一个'label'属性

attributes(trial$dates)
#$class
#[1] "labelled" "Date"    
#$label
#[1] "New Date"
attributes(.difftime(trial$dates, units = 'secs')) 
#$class #// changed class
#[1] "difftime"
#$label #// this attribute is untouched
#[1] "New Date"
#$units
#[1] "secs"

相关内容

  • 没有找到相关文章

最新更新