28
Szybkość operacji na macierzach i ramkach danych
Posted under analiza danych, GNU R by Artur SuchwałkoCzy podstawowe operacje na ramkach danych i macierzach wykonywane są przez R z taką samą szybkością? To oczywiście zależy od rodzaju operacji. Zrobiłem dzisiaj prosty eksperyment polegający na wybieraniu kolumn o tych samych numerach z macierzy i z ramki danych oraz mierzeniu czasu tych operacji.
To nie jest całkiem akademicki problem. W przypadku dużych zadań obliczeniowych różnice w efektywności reprezentacji danych mogą mieć znaczenie. Podobnie podczas obróbki wstępnej danych do dalszych analiz statystycznych, czy wykonywanych metodami data mining. W tej sytuacji podstawowym obiektem jest ramka danych, ale może okazać się, że pewne operacje wykonywane są szybciej na innego rodzaju obiektach.
x.macierz <- matrix(rnorm(5000*1000), 5000, 1000)
x.ramka.danych <- as.data.frame(x.macierz)
podzbior <- sample(1:1000, 1000, replace=T) # losujemy numery kolumn
czas.pocz <- proc.time()
for (i in 1:10) x.macierz[, podzbior] -> y # wybieramy kolumny
proc.time() - czas.pocz
czas.pocz <- proc.time()
for (i in 1:10) x.ramka.danych[, podzbior] -> y
proc.time() - czas.pocz
A czy w przypadku wyboru wierszy zamiast kolumn szybsza okaże się ta sama reprezentacja danych?
Przy okazji, jak widać z przykładu, macierz na ramkę danych konwertuje się funkcją as.data.frame. Ramkę danych na macierz przekształca się korzystając z as.matrix albo data.matrix.
