編碼:
Storage<-numeric(5)
for(i in 1:5){
Storage[i]<-i^2
}
為了存盤值,我創建了一個空向量,即“存盤”。但我不明白“numeric(5)”是什么意思,尤其是 5 在 numeric() 中的意思。
為什么不是 numeric()?在 Python 中,我會做 storage = [],這是否等于 numeric()?
uj5u.com熱心網友回復:
我們可以通過簡單的比較和基準測驗輕松測驗為什么預先分配正確大小的向量是明智的。為此,我們定義了一個簡單的函式來填充長度為 10,000 的數字向量。我們可以選擇使用預分配向量numeric(10000)或不使用預分配它c()
test <- function(preallocate) {
Storage <- if(preallocate) numeric(10000) else c()
for(i in 1:10000) {
Storage[i] <- i
}
}
現在讓我們比較一下當我們打開和關閉預分配時這個函式有多快:
library(microbenchmark)
microbenchmark(test(preallocate = TRUE), test(preallocate = FALSE))
#> Unit: microseconds
#> expr min lq mean median uq max neval
#> test(preallocate = TRUE) 300.3 301.8 331.053 302.50 305.65 2762.4 100
#> test(preallocate = FALSE) 1474.0 1498.3 1710.614 1519.15 1579.30 3998.8 100
我們可以看到寫入未預分配的向量要慢五倍以上。
順便說一句,回答您帖子標題中的問題,as.numeric并numeric做兩件不同的事情。numeric創建一個給定長度的零向量,而as.numeric嘗試將傳遞給它的任何內容轉換為數字向量:
as.numeric(5)
#> [1] 5
numeric(5)
#> [1] 0 0 0 0 0
as.numeric("5")
#> [1] 5
numeric("5")
#> [1] 0 0 0 0 0
使用reprex v2.0.2創建于 2022-11-03
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/526647.html
標籤:rfor循环
