2016-04-22 2 views
0

Мои исследования до сих пор

Большинство статей обсуждают разницу между class и typeof, но я не нашел много различий между mode, storage.mode и typeof.В чем разница (с точки зрения идеи) режима, storage.mode, typeof в R?

Я получаю, что mode, storage.mode и typeof более похожи и class - это совсем другое. Я понимаю, что первые два звонят typeof, и я понимаю, что они обрабатывают определенные типы несколько иначе (я даже знаю, какие и как). То, что я хотел бы знать, это то, что есть идея.

Минимальный рабочий пример

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) 

Я ищу

Какой ответ я являюсь не ищет:. "mode и storage.mode ручкой single иначе

Каких ответ I am loking for: "typeof - это тип данных, который используется в основанная на C, тогда как mode - это тип данных, который ... и storage.mode - это тип данных, которые ... »

Кроме того, я был бы признателен за дифференциацию терминов« режим »и« тип », которые были использованы в руководства и учебные пособия. Например, было сказано, что typeof возвращает режим объекта данных - что мне кажется сбивающим с толку.


Я надеюсь, что вопрос был конкретным/достаточно ясным. Скажите, пожалуйста, что было неясно, до голосования или голосования для голосования.

+0

Ну, [Hadley говорит, что это] (http://adv-r.had.co.nz/OO-essentials.html): «Возможно, вы слышали о режиме'() 'и' хранения. режим() '.Я рекомендую игнорировать эти функции, потому что они просто псевдонимы имен, возвращаемых 'typeof()', ** и существуют исключительно для S-совместимости **. «Если я правильно понимаю последний бит вашего сообщения, это приближается к виду Редактировать: Кроме того, возможно, документация R помогает: [здесь] (http://stat.ethz.ch/R-manual/R-devel/doc/manual/R-lang.html#Objects) – Laterow

+0

@ Laterow: Да, я думаю, что это очень помогает. Связанная с R документация была прочитана мной, но на вопрос не ответила. Ссылка на Хэдли более полезна. Если вам нравится, вы можете сделать Ответ на этот вопрос: – Make42

+0

@Laterow: Возможно, вы можете объяснить разницу терминов «тип» и «режим» в учебниках (см. вопрос). – Make42

ответ

3

typeof является ключевой функцией.

Другие варианты typeof, которые существуют исключительно для целей S compatibilty и в основном не используются сегодня.

storage.mode может использоваться в S при вызове .Fortran или .C с цифровыми данными, чтобы вы знали, является ли вход integer или double, скажем. Это различие часто может быть размыто в R, но при передаче объектов на эти языки важное значение имеет различие. Это как typeof в этом отношении. mode просто дает numeric для обоих, чтобы он был грубее.

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

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

Их работа лучше всего понять, посмотрев на их источник. В обоих случаях источник довольно короткий.

Например, storage,mode возвращает то же значение, typeof если значение, возвращаемое typeof не "closure", "builtin" или "special" и в тех случаях возвращает "function".

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

Я ценю усилия, но это именно то, что я уже писал в своем вопросе, и именно тот ответ, который я не искал, также - как уже было сказано в моем вопросе. – Make42

+0

Прояснили, как они используются в S. –

+0

Можете ли вы добавить несколько слов к использованию терминов «режим» и «тип», или это только что-то учебники используют взаимозаменяемо, не задумываясь о точном использовании терминологии? – Make42