解讀 R 中 system.time 函式的輸出

Jesse John 2023年1月30日 R R Time
  1. 理解 R 中 system.time 函式輸出中的術語
  2. R 中的 system.time 輸出示例
解讀 R 中 system.time 函式的輸出

system.time() 函式是我們可以用來估計程式碼執行所需時間的工具之一。它的輸出給出了三個值:使用者、系統和經過的時間(以秒為單位)。

在對所涉及的術語進行簡要說明後,我們將檢視此函式的輸出示例,以瞭解每個值所測量的內容。

理解 R 中 system.time 函式輸出中的術語

system.time() 函式的輸出中,最容易理解的術語是第三個值:elapsed。它測量程式碼塊執行時經過的時鐘時間。

在幾乎所有情況下,這對使用者都很重要:他們必須等待 R 完成執行程式碼。

另外兩個,使用者和系統的組合,測量 CPU 執行程式碼塊的時間。

簡單來說,我們可以將它們視為如下。

使用者時間是處理使用者應用程式程式碼(R 程式碼)所花費的 CPU 時間。如果使用者應用程式訪問系統資源,則該處理時間將報告為系統時間。

參考資料部分中給出的 Wikipedia 文章提供了有關 CPU 時間的這兩個組成部分的簡要技術細節。

R 中的 system.time 輸出示例

下面的簡單示例顯示瞭如何使用 system.time() 函式。

示例程式碼:

system.time({
    print("Hello to R.")
})

輸出:

[1] "Hello to R."
   user  system elapsed
  0.001   0.000   0.001

system.time() 函式在程式碼塊之前和之後呼叫 proc.time() 函式,並給出了區別。

它等同於以下內容。

示例程式碼:

x = proc.time()
print("Hello to R.")
y = proc.time()
y-x

輸出:

> x = proc.time()
> print("Hello to R.")
[1] "Hello to R."
> y = proc.time()
> y-x
   user  system elapsed
  0.001   0.001   0.001

看下面兩個例子來了解使用者時間和系統時間的區別。

在第一個示例中,R 計算了 1000 次並且只列印了一次。多次執行此程式碼塊並檢查結果。

示例程式碼:

system.time({
    x=0
    for(i in 1:1000){
        x = x+1
    }
    print(x)
})

輸出:

   user  system elapsed
  0.009   0.000   0.011

雖然使用者時間是正數,但系統時間在大多數情況下幾乎為 0。

現在,讓我們看另一個執行相同計算但列印 1000 次的程式碼示例。

示例程式碼:

system.time({
    x=1
    for(i in 1:1000){
        x = x+1
        print(x)
    }
})

輸出:

   user  system elapsed
  0.093   0.026   0.120

現在,我們發現系統時間也是正數。這是因為 1000 個 print 語句使 R 可以訪問作業系統的輸入輸出資源。

最後,為了說明經過的時間,讓我們看一個 CPU 長時間空閒的例子。

示例程式碼:

system.time({
    Sys.sleep(5) # Time in seconds.
})

輸出:

   user  system elapsed
  0.013   0.006   5.000

我們發現經過的時間遠遠超過 CPU 時間。它(幾乎)與我們指定的睡眠時間相同,因為程式碼沒有做任何其他事情。

參考

以下兩篇 Wikipedia 文章提供了與 CPU 時間相關的簡要技術細節。

  1. CPU 時間
  2. 使用者空間和核心空間
Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.