簡體   English   中英

R *將向量用作輸入; 矩陣作為輸出

[英]R *apply vector as input; matrix as output

我想將向量的每個元素應用於輸出向量的函數。 在將函數應用於該向量的每個元素之后,我應該有許多向量,為了具有矩陣,我想對其進行rbind

該代碼應等效於以下內容:

my_function <- function(x) x:(x+10)

my_vec <- 1:10
x <- vector()
for(i in seq_along(vec)){
  x <- rbind(x,my_function(my_vec[i]))
}

當然, my_functionmy_vec只是示例。

嘗試:

 tmp <- lapply(my_vec, my_function)
 do.call(rbind, tmp)

或者像Heroka建議的那樣使用sapply 我更喜歡lapply ,然后以我喜歡的方式( rbind / cbind )綁定我的輸出,而不是潛在地轉置。

這是一個替代方案:

matrix( unlist(lapply(my_vec,my_function)), length(my_vec), byrow=TRUE )

速度幾乎相同:

library(microbenchmark)

my_function <- function(x) sin(x:(x+10))

for ( n in 1:4 )
{
  my_vec <- 1:10^n

  print(
    microbenchmark( mra68 = matrix( unlist(lapply(my_vec,my_function)), length(my_vec), byrow=TRUE ),
                    stas.g = do.call(rbind, lapply(my_vec, my_function)),
                    times = 1000 )
  )

  print("identical?")
  print( identical( matrix( unlist(lapply(my_vec,my_function)), length(my_vec), byrow=TRUE ),
                    do.call(rbind, lapply(my_vec, my_function)) ) )  
}

Unit: microseconds
   expr    min     lq     mean median      uq     max neval
  mra68 38.496 40.307 68.00539 41.213 110.052 282.148  1000
 stas.g 41.213 42.572 72.86443 43.930 115.939 445.186  1000
[1] "identical?"
[1] TRUE
Unit: microseconds
   expr     min      lq     mean   median       uq      max neval
  mra68 793.002 810.212 850.4857 818.3640 865.2375 7231.669  1000
 stas.g 876.786 894.901 946.8165 906.2235 966.9100 7051.873  1000
[1] "identical?"
[1] TRUE
Unit: milliseconds
   expr      min       lq     mean   median       uq      max neval
  mra68 2.605448 3.028442 5.269003 4.020940 7.807512 14.51225  1000
 stas.g 2.959604 3.390071 5.823661 4.500546 8.800462 92.54977  1000
[1] "identical?"
[1] TRUE
Unit: milliseconds
   expr      min       lq     mean   median       uq      max neval
  mra68 27.29810 30.99387 51.44223 41.20167 79.46185 559.0059  1000
 stas.g 33.63622 37.22420 60.10224 49.07643 92.94333 395.3315  1000
[1] "identical?"
[1] TRUE
> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM