2013-08-29 6 views
6

Czy jest możliwe utworzenie nowej kolumny w data.table i aktualizacja istniejącej kolumny w tym samym czasie? Następujące nie działa. Dzięki.R data.table segfault podczas próby aktualizacji jednej kolumny i utworzenia kolejnego

library(data.table) 
dt <- data.table(x=runif(4), y=runif(4), z=c("x","x","y","y")) 
dt[, c("x", "y") := list(x[1], y[1]), by=z]  # works 
dt[, c("x", "newx") := list(x[1], y[1]), by=z] 

Caught wysypać:

address 0x20000010, cause 'memory not mapped' 

Traceback:

1: [.data.table(dt, , :=(c("x", "newx"), list(x[1], y[1])), by = z) 
2: dt[, :=(c("x", "newx"), list(x[1], y[1])), by = z] 
+0

Ouak, tak, już to zrobiłem. Myślę, że po prostu uniknąłem robienia tego zamiast zgłoszenia go jako błędu. – Frank

Odpowiedz

5

Tak. Ale trzeba v1.8.9 z R-Forge, aby uzyskać następujące poprawki:

o Mieszanie dodawanie i aktualizowanie w jednym DT [, := (existingCol = ..., newCol = ...), by =. ..] teraz działa bez błędu lub uszkodzenia, # 2778 i # 2528. Wielkie podziękowania dla Arunkumara Srinivasana za zgłoszenie oraz za ładne, powtarzalne przykłady. Dodano testy.

Zobacz latest NEWS (zaktualizowane na żywo) w celu wprowadzenia innych zmian w wersji 1.8.9.

+2

Gdzie można znaleźć plik .tar.gz dla wersji 1.8.9? –

+5

@DWin Jest na R-Forge, tutaj: 'R-Forge.R-project.org/src/contrib/data.table_1.8.9.tar.gz'. Możesz zainstalować go bezpośrednio za pomocą czegoś takiego: 'install.packages (" data.table ", repos =" http://R-Forge.R-project.org ", type =" source ")'. –

+0

Dzięki. Uwierz mi, wiem, jak zainstalować ze źródła. Zwykle jestem w stanie znaleźć pakiety, ale obecna konfiguracja R-Forge wydaje się frustruć moje zwykłe strategie wyszukiwania. Czy istnieje standardowa lokalizacja dla spakowanej wersji pakietu w R-Forge? –