【问题标题】:Is Sys.time() the time required for the individual computer to run commands?Sys.time() 是单个计算机运行命令所需的时间吗?
【发布时间】:2025-11-30 06:45:01
【问题描述】:

我正在使用 R 编程语言。我正在学习计算中不同类型的“时间”。一般时间似乎有两种类型:与您正在运行的程序的一般数学复杂性相对应的时间,以及与您的个人计算机运行程序所需的时间相对应的时间。

我在这里遇到了 R 中的 Sys.time() 命令:https://www.r-bloggers.com/2017/05/5-ways-to-measure-running-time-of-r-code/

Sys.time() 是否测量您的个人计算机运行命令所需的时间?例如,我使用 Sys.time() 编写了下面的代码来测量我的个人计算机在 R 中针对不同数量的观察运行以下过程所花费的时间。

 library(Rtsne)
    library(cluster)
    library(ggplot2)
    library(dplyr)
    library(dbscan)
    library(plotly)


#generate data

var_1 <- rnorm(1000,1,4)
var_2<-rnorm(1000,10,5)
var_3 <- sample( LETTERS[1:4], 1000, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05) )
response_variable <- sample( LETTERS[1:2], 100, replace=TRUE, prob=c(0.4, 0.6) )


#put them into a data frame called "f"
f <- data.frame(var_1, var_2, var_3, response_variable)

#declare var_3 and response_variable as factors
f$response_variable = as.factor(f$response_variable)
f$var_3 = as.factor(f$var_3)

#create id
f$ID <- seq_along(f[,1])


mseDF <- NULL

for (size in c(100,500,1000)) {
   
    start_time <- Sys.time()
   
   
    #gower distance
   
    gower_dist <- daisy(f[1:size, 1:4],
                        metric = "gower")
   
    lof <- lof(gower_dist, k=3)
   
    tsne_obj <- Rtsne(gower_dist,  is_distance = TRUE)
   
    tsne_data <- tsne_obj$Y %>%
        data.frame() %>%
        setNames(c("X", "Y")) %>%
        mutate(
            name = f[1:size,]$ID,
            lof=lof,
            var1=f[1:size,]$var_1,
            var2=f[1:size,]$var_2,
            var3=f[1:size,]$var_3
        )
   
    p1 <- ggplot(aes(x = X, y = Y, size=lof, key=name, var1=var1,
                     var2=var2, var3=var3), data = tsne_data) +
        geom_point(shape=1, col="red")+
        theme_minimal()
   
   
    ggplotly(p1, tooltip = c("lof", "name", "var1", "var2", "var3"))
    end_time <- Sys.time()
   
   (final = end_time - start_time)
   print (final)
mseDF <- rbind(mseDF, data.frame(size, final))

}

这是正确的吗?

额外:可视化运行时间:

plot(mseDF)
 lines(mseDF)

谢谢

【问题讨论】:

    标签: r loops for-loop time


    【解决方案1】:

    另一种方法是使用 proc.time;例如

    > start_time <- proc.time()
    > # some computation
    > for (i in 1:10000000) i ^ 3
    > proc.time() - start_time
       user  system elapsed 
       0.70    0.02    0.72 
    

    【讨论】:

      【解决方案2】:

      Sys.time() 是否测量您的个人计算机运行命令所需的时间?

      没有。 Sys.time() 返回当前时间。同样Sys.Date() 返回当前日期。您可以通过减去两个对Sys.time 的调用来创建一个包含代码的经过时间函数。但是你的代码暗示你已经知道如何做到这一点,所以也许英语不是你的第一语言,这个问题是一个简单的表达错误。所以也许“是”,因为看起来你会得到结果出现的经过时间。

      你可能想看看?system.time

      system.time({for(i in 1:10e6){x <- Sys.time()}})
      #   user  system elapsed 
      # 13.274   0.000  13.273 
      

      还有几个基准测试包(如上面的博客引用所示。)。示例:pkg:microbenchmark

      【讨论】: