Co można zrobić z danymi.ramka, której nie można z danymi.stolik?

Właśnie zacząłem używać R, i natknąłem się na dane.stolik. Uważam to za genialne.

Bardzo naiwne pytanie: Czy mogę zignorować dane.ramka do wykorzystania danych.tabela aby uniknąć pomyłek składni pomiędzy dwoma pakietami?

Author: Jaap, 2012-11-29

1 answers

Z danych .tabela FAQ

FAQ 1.8 OK, zaczynam widzieć jakie dane.tabela jest o, ale dlaczego nie poprawiłeś danych.ramka w R? Dlaczego to musi być nowy pakiet?

Jako FAQ 1.1 highlights, j W [.data.table jest zasadniczo różni się od j W [.data.frame. Nawet coś tak prostego jak DF[,1] złamałby istniejący kod w wielu pakietach i Kod użytkownika. Jest to projektowane i chcemy, aby działało w ten sposób dla więcej skomplikowana składnia do działania. Tam są też inne różnice (patrz FAQ 2.17).

Ponadto, data.table dziedziczy z data.frame. Jest to data.frame, też. A data.table można przekazać do dowolnego pakietu, który akceptuje tylko {[6] } i ten pakiet może używać [.data.frame składnia na data.table.

W miarę możliwości zaproponowaliśmy również ulepszenia R. Jeden z zostały one przyjęte jako nowa funkcja W R 2.12.0:

unique() i match() są teraz szybsze na wektorach znaków, gdzie wszystkie elementy są w globalnym CHARSXP cache i mają nieoznaczone kodowanie (ASCII). Podziękowania dla Mateusza Dowle za sugestie usprawnień do sposobu generowania kodu hashowego w unique. c.

Drugą propozycją było użycie memcpy w duplicate.c, co jest znacznie szybciej niż pętla A for W C. poprawiłoby to sposób kopiowania R dane wewnętrzne (na niektórych miarach 13 razy). Wątek na R-devel jest tutaj : http://tolstoy.newcastle.edu.au/R/e10/devel/10/04/0148.html .

Jakie są mniejsze różnice w składni pomiędzy data.frame a danymi.tabela

  • DT[3] odnosi się do 3. wiersz, ale DF[3] odnosi się do 3. kolumna
  • DT[3, ] == DT[3], Ale DF[ , 3] == DF[3] (nieco myląco w danych.frame, natomiast data.tabela jest spójna)
  • z tego powodu mówimy, że przecinek jest opcjonalny w DT, ale nie opcjonalny w DF
  • DT[[3]] == DF[, 3] == DF[[3]]
  • DT[i, ], gdzie i jest pojedynczą liczbą całkowitą, Zwraca pojedynczy wiersz, podobnie jak DF[i, ], ale w przeciwieństwie do macierzy jednorzędowej, która zwraca wektor.
  • DT[ , j] gdzie {[0] } jest pojedynczą liczbą całkowitą zwraca dane z jednej kolumny.tabela, w przeciwieństwie do DF[, j], która domyślnie zwraca wektor
  • DT[ , "colA"][[1]] == DF[ , "colA"].
  • DT[ , colA] == DF[ , "colA"] (obecnie w danych.tabela v1.9. 8, ale wkrótce się zmieni, zobacz Uwagi do wydania)
  • DT[ , list(colA)] == DF[ , "colA", drop = FALSE]
  • DT[NA] zwraca 1 wiersz NA, ale DF[NA] zwraca całą kopię DF zawierającą NA w całości. Symbol NA jest typem logical W R i dlatego jest przetwarzany przez [.data.frame. Intencją użytkownika było prawdopodobnie DF[NA_integer_]. [.data.table przekierowuje do tej prawdopodobnej intencji automatycznie, dla wygody.
  • DT[c(TRUE, NA, FALSE)] traktuje NA jako FALSE, ale DF[c(TRUE, NA, FALSE)] zwraca NA wiersze dla każdego NA
  • DT[ColA == ColB] jest prostsze niż DF[!is.na(ColA) & !is.na(ColB) & ColA == ColB, ]
  • data.frame(list(1:2, "k", 1:4)) tworzy 3 kolumny, data.tabela tworzy jedną kolumnę list.
  • check.names jest domyślnie TRUE W data.frame, ale FALSE w danych.stolik dla wygody.
  • stringsAsFactors jest domyślnie TRUE W data.frame, ale FALSE w danych.tabela, dla efektywności. Ponieważ globalny bufor łańcuchów został dodany do R, elementy znaków są wskaźnikiem do pojedynczego buforowanego łańcucha i nie ma już korzyści z konwersji na factor.
  • Wektory atomowe w kolumnach list są zwijane po wydrukowaniu za pomocą ", " w data.frame, ale "," w danych.tabela z końcowym przecinkiem po 6 pozycji, aby uniknąć przypadkowego drukowania dużych osadzonych obiektów. W {[3] } bardzo często ustawiamy drop = FALSE. Gdy zapomnimy, błędy mogą pojawić się w przypadkach brzegowych, w których zaznaczone są pojedyncze kolumny i nagle zwracany jest wektor, a nie pojedyncza kolumna data.frame. W [.data.table skorzystaliśmy z okazji, aby uczynić go spójnym i porzuciliśmy drop. Kiedy dane.tabela jest przekazywana do danych.tabela-pakiet nieświadomy, pakiet ten nie dotyczy żadnego tych różnic; to po prostu działa.

Małe zastrzeżenie

Być może będą przypadki, w których niektóre pakiety używają kodu, który spada po podaniu danych.ramka, jednak biorąc pod uwagę, że data.table jest stale utrzymywana, aby uniknąć takich problemów, wszelkie problemy, które mogą się pojawić, będą szybko naprawiane.

Na przykład

  • base:: unname(DT) teraz działa ponownie, zgodnie z potrzebami plyr::melt (). Dzięki Christoph Jaeckel za reportaż. Test dodany.
  • as.data.dla ITime została dodana metoda frame, dzięki czemu ITime może zostać przekazany do ggplot2 bez błędu, #1713. Podziękowania dla Farrela Buchinsky ' ego za reportaż. Testy dodane. Etykiety osi ITime są nadal wyświetlane jako liczby całkowite sekund od północy; nie wiemy dlaczego ggplot2 nie powołuje się na to.charakter metoda. Konwersja ITime do POSIXct dla ggplot2, jest jednym z podejść.
 65
Author: mnel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-27 08:40:33