2016-04-22 22 views
0

私の研究これまで

ほとんどの記事はclasstypeofの違いを議論するが、私はmodestorage.mode、とtypeof間の違いにあまり見つかっていません。mode、storage.mode、typeof of Rの違いは何ですか?

私は、mode,storage.mode、およびtypeofがより類似しており、classがより異なっています。私は前者の2つを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) 

私は私がないを探しています答え、どのような

を探しています: "異なっmodestorage.modeハンドルsingle

どのような種類の私はですのためにloking: "typeofは、基本的なCの実装であり、modeはデータ型であり、storage.modeはそのデータ型です... "

さらに、「モード」と「タイプ」という用語の差別化に感謝しますマニュアルとチュートリアル。たとえば、typeofはデータオブジェクトのモードを返すと言われています。これは私にとっては混乱しているようです。


質問が明確であることを願っています。ダウン投票や投票の投票の前に、明確ではなかったことを教えてください。

+0

まあ、[ハドレーはこれを言う](http://adv-r.had.co.nz/OO-essentials.html):「あなたは 'モード()'と 'ストレージの聞いたことがあります。 mode() 'これらは '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が重要な機能です。

その他は、S相性のためにのみ存在するものであり、現在はほとんど使用されていません。typeof

storage.modeは、入力がintegerまたはdoubleかどうかを知るために、数値データを使って.Fortranまたは.Cを呼び出すときに使用できます。この区別はRではしばしばぼやけることがありますが、オブジェクトをこれらの言語に渡すときには区別が重要です。この点に関してはtypeofのようです。 modeは、これらの両方に対してnumericを与えているので粗くなっています。

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

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

その動作は、ソースを見ることによって最もよく理解できます。どちらの場合も、ソースはかなり短いです。 typeofによって返される値は"closure""builtin"又は"special"であり、これらの場合には"function"を返していない限り

たとえば、storage,modetypeofと同じ値を返します。

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

私は努力を感謝しますが、それは私の質問に書いたこととまさに私が探していなかった答えの正確さです。 – Make42

+0

Sでの使用方法を明確にしました –

+0

用語「モード」と「タイプ」の使用にいくつかの言葉を追加できますか?これはちょっとした用語です。 – Make42

関連する問題