Prędkość operacji wektorowej zależna od liczby kolumn danych
Dlaczego operacja porównania na ramce danych zajmuje więcej czasu z taką samą liczbą elementów, ale ułożona w więcej kolumn na operacjach wektorowych? Weźmy ten prosty przykład, gdzie odejmujemy 0,5 od każdego elementu i porównujemy go, aby zobaczyć, czy jest on <0 (związane z tym pytaniem ):
f.df <- function( df , x = 0.5 ){
df <- df - x
df[ df < 0 ] <- 0
return( df )
}
df1 <- data.frame( matrix( runif(1e5) , nrow = 1e2 ) )
df2 <- data.frame( matrix( runif(1e5) , nrow = 1e3 ) )
df3 <- data.frame( matrix( runif(1e5) , nrow = 1e4 ) )
require( microbenchmark )
microbenchmark( f.df( df1 ) , f.df( df2 ) , f.df( df3 ) , times = 10L )
#Unit: milliseconds
# expr min lq median uq max neval
# f.df(df1) 1562.66827 1568.21097 1595.07005 1674.91726 1680.90092 10
# f.df(df2) 95.77452 98.12557 101.31215 190.46906 198.23927 10
# f.df(df3) 16.25295 16.42373 16.74989 17.95621 18.69218 10