写入文件所用时间,单位为 chosen/known

Write to file elapsed time, with chosen/known units

我正在使用 R 和 Rstudio。我完全是新手

我的意思是将循环的每次迭代中经过的时间写入文件。所以我定义了三个变量:start <- Sys.time()(在代码的开头),以及类似的prevtimecurrtime(在每次迭代的开始和结束)。

变量的值为(例如,最后一次迭代)

> currtime - start
Time difference of 5.486106 mins
> currtime - prevtime
Time difference of 1.239183 secs

R 自动设置单位。但是如果我执行

> write( currtime - start, file = "test.Rout", append = F )
> write( currtime - prevtime, file = "test.Rout", append = T )

我进了test.Rout

5.486106
1.239183

没有单位。

有没有办法强制写入文件的单位(write),例如,全部为秒,所以没有歧义?

我想我可以扫描 currtime - prevtime 的输出并找到单位,但我确信有一种非常简单的方法可以做到这一点。

我想我也可以使用 system.time(*{mycommands}*),但我认为分配变量会更容易,因为我可能想在循环中间定义时间点,并获得各种时间差。

尝试分离单位并将它们组合成时间值:

start <- Sys.time()
currtime <- start + 180
diff.time <- currtime - start
timediff <- paste(diff.time, attr(diff.time, "units"))
write(timediff, file = "test.Rout", append = F )

说明

对象 diff.time 属于 class difftime。当您将其写入文件时,属性将被删除。检查 str(diff.time) 以查看结构:

str(diff.time)
Class 'difftime'  atomic [1:1] 3
  ..- attr(*, "units")= chr "mins"

我们要找的属性是"units",它的值是"mins"。我们可以提取该属性并将其 paste 到时间差。

检查属性

  1. 我们可以用attr("object", "name of attribute")检查属性:

    attr(diff.time, "units")
    [1] "mins"
    
  2. 我们也可以检查attributes和子集列表样式:

    attributes(diff.time)
    $units
    [1] "mins"
    
    $class
    [1] "difftime"