R中的mode,storage.mode,typeof有什么区别(就想法而言)?

时间:2016-04-22 13:08:13

标签: r language-concepts

到目前为止我的研究

大多数文章都会讨论classtypeof之间的区别,但我对modestorage.mode和{{1}之间的差异没有太大帮助}。

我认为typeofmodestorage.mode更相似,typeof更加不同。我得到前两个调用class并且我理解他们处理特定类型的方式略有不同(我甚至知道哪些类型和方式)。我想知道的是背后的想法是什么。

最小工作示例

typeof

我在找什么

寻找的是什么样的答案:&#34; 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

的答案是什么?&#34; single是基础C实现中使用的数据类型,而typeof是数据输入...和mode是......&#34;

的数据类型

此外,我希望区分术语&#34;模式&#34;和&#34;键入&#34;已经在手册和教程中使用过。例如,有人说storage.mode返回数据对象的模式 - 这对我来说似乎很困惑。

我希望这个问题具体/清楚。在投票或投票结束之前,请告诉我不清楚的事情。

1 个答案:

答案 0 :(得分:4)

typeof是关键功能。

其他是typeof的变体,仅仅出于S兼容的目的而存在,并且今天大多不使用。

当使用数字数据调用.Fortran或.C时,可以在S中使用

storage.mode,这样您就可以知道输入是integer还是double。这种区别在R中经常是模糊的,但是当将对象传递给这些语言时,区别很重要。在这方面就像typeofmode只为这两者提供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)