2016-04-22 4 views
0

Meine Forschung bisher

Die meisten Artikel diskutieren die Differenz zwischen class und typeof aber ich habe nicht viel auf die Unterschiede zwischen mode, storage.mode und typeof gefunden.Was ist der Unterschied (in Bezug auf die Idee) von mode, storage.mode, typeof in R?

ich, dass mode, storage.mode und typeof ähnlicher sind und class ist anders. Ich bekomme, dass die beiden ehemaligen Call typeof und ich verstehe, dass sie bestimmte Arten leicht anders behandeln (ich weiß sogar welche und wie). Was ich gerne wissen möchte, ist, was dahinter steckt.

Minimal Arbeitsbeispiel

library(data.table) 

my_vector_boolean <- c(TRUE, FALSE, T, F) 
my_vector_integer <- c(1L, 2L, 3L) 
my_vector_character <- c("a", "b", "abc") 
my_vector_factor <- as.factor(c("a", "b", "c")) 
my_list <- list(a=1, b=2L, c="c") 
my_matrix <- matrix(c(1,2,3, 11,12,13), nrow = 2, ncol = 3, byrow = TRUE, 
        dimnames = list(c("row1", "row2"), c("col1", "col2", "col3"))) 
my_dataframe <- data.frame(1, 1L:10L, sample(3, 10, replace = TRUE)) 
my_datatable <- data.table(1, 1L:10L, sample(3, 10, replace = TRUE)) 

datatypeslist <- list(
    my_vector_boolean = my_vector_boolean, 
    my_vector_integer = my_vector_integer, 
    my_vector_character = my_vector_character, 
    my_vector_factor = my_vector_factor, 
    my_list = my_list, 
    my_matrix = my_matrix, 
    my_dataframe = my_dataframe, 
    my_datatable = my_datatable 
) 

multi.sapply <- function(...) { 
     arglist <- match.call(expand.dots = FALSE)$... 
     var.names <- sapply(arglist, deparse) 
     has.name <- (names(arglist) != "") 
     var.names[has.name] <- names(arglist)[has.name] 
     arglist <- lapply(arglist, eval.parent, n = 2) 
     x <- arglist[[1]] 
     arglist[[1]] <- NULL 
     result <- sapply(arglist, function (FUN, x) sapply(x, FUN), x) 
     colnames(result) <- var.names[-1] 
     return(result) 
} 

multi.sapply(datatypeslist, typeof, storage.mode, mode, class) 

Was ich suche

Welche Art von Antwort, die ich bin nicht suchen. "mode und storage.mode Griff single anders

Welche Art von antwort ich bin loking für: "typeof ist der Datentyp, der in der verwendet wird zugrunde liegende C-Implementierung, während mode ist der Datentyp, der ... und storage.mode ist der Datentyp, der ... "

Zusätzlich würde ich eine Unterscheidung der Begriffe" Modus "und" Typ ", die in verwendet wurden Handbücher und Tutorials. Zum Beispiel wurde gesagt, dass typeof den Modus eines Datenobjekts zurückgeben - was mir verwirrend erscheint.


Ich hoffe, dass diese Frage spezifisch/klar genug war. Bitte sagen Sie mir, was nicht klar war, bevor Sie abstimmen oder abstimmen.

+0

Nun, [Hadley sagt das] (http://adv-r.had.co.nz/OO-essentials.html): "Sie haben vielleicht schon von' mode() 'und' storage gehört. Modus() '.Ich empfehle, diese Funktionen zu ignorieren, da sie nur Aliase der Namen sind, die von 'typeof()', ** zurückgegeben werden und nur für die S-Kompatibilität existieren. "Wenn ich das letzte Bit Ihres Posts richtig verstehe, nähert es sich dem Typ von der Antwort, die du willst, oder? Edit: Vielleicht hilft auch die R-Dokumentation: [hier] (http://stat.ethz.ch/R-manual/R-devel/doc/manual/R-lang.html#Objects) – Laterow

+0

@Laterow: Ja, ich denke, das hilft sehr. Die R-Dokumentation, die du verlinkt hast, wurde von mir gelesen, aber nicht mit Frage beantwortet. Der Link zu Hadley ist nützlicher. Wenn du magst, kannst du machen eine Antwort von diesem. – Make42

+0

@Laterow: Auch, vielleicht können Sie den Unterschied der Begriffe "Typ" und "Modus" in Tutorials erklären (siehe die Frage). – Make42

Antwort

3

typeof ist die Schlüsselfunktion.

Die anderen sind Variationen von typeof, die ausschließlich für den Zweck der S-Kompatibilität existieren und meist nicht verwendet werden.

storage.mode kann in S verwendet werden, wenn Aufruf .Fortran oder .C mit numerischen Daten, so dass Sie wissen, ob ein Eingang ist ein integer oder double, sagen wir. Diese Unterscheidung kann in R oft verwischt sein, aber wenn Objekte an diese Sprachen übergeben werden, ist die Unterscheidung wichtig. Es ist wie typeof in dieser Hinsicht. mode gibt nur numeric für beide, also ist es gröber.

> mode(1L) 
[1] "numeric" 
> storage.mode(1L) 
[1] "integer" 

> mode(1) 
[1] "numeric" 
> storage.mode(1) 
[1] "double" 

Ihre Operation wird am besten verstanden, indem man auf ihre Quelle schaut. In beiden Fällen ist die Quelle ziemlich kurz.

Zum Beispiel storage,mode gibt den gleichen Wert wie typeof es sei denn, der Wert zurückgeführt, indem typeof"closure" ist, "builtin" oder "special" und in diesen Fällen kehrt "function".

storage.mode <- function (x) 
    switch(tx <- typeof(x), closure = , builtin = , special = "function", tx) 
+0

Ich schätze den Aufwand, aber genau das habe ich bereits in meiner Frage geschrieben und genau die Art von Antwort, nach der ich nicht gesucht habe - auch - wie bereits in meiner Frage ausgeführt. – Make42

+0

Haben geklärt, wie sie in S. –

+0

verwendet werden Können Sie einige Wörter zur Verwendung der Begriffe "Modus" und "Typ" hinzufügen oder ist dies nur etwas, Tutorials verwenden austauschbar, ohne viel über die genaue Verwendung der Terminologie zu denken? – Make42