28.09

2008

Szybkość operacji na macierzach i ramkach danych

Autor: artur

Czy 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.

Spróbuj ponownie