data.frame
はから継承されているとよく言われますが、data.frame 列 ( 、など)list
にアクセスするための多くの一般的なパラダイムを考えると、これは理にかなっています。$
sapply
まだ、オブジェクト"list"
のクラス リストで返されるアイテムの中にはありません。data.frame
dat <- data.frame(x=runif(100),y=runif(100),z=runif(100),g=as.factor(rep(letters[1:10],10)))
> class(dat)
[1] "data.frame"
a のクラスを解除するdata.frame
と、それがリストであることを示します。
> class(unclass(dat))
[1] "list"
また、data.frame メソッドがない場合、リスト メソッドよりも優先してデフォルト メソッドが呼び出されるようにテストします。
> f <- function(x) UseMethod('f')
> f.default <- function(x) cat("Default")
> f.list <- function(x) cat('List')
> f(dat)
Default
> f.data.frame <- function(x) cat('DF')
> f(dat)
DF
次に2つの質問:
data.frame
正式な継承の失敗はlist
、設計の観点から何か利点がありますか?data.frame
s をリストとして扱っているように見える関数は、それらをリストとして扱うことをどのように知っているのでしょうか? これを見るlapply
と、C の内部コードにすぐに移行するように見えるので、おそらくそれだけですが、ここで少し頭がおかしくなりました。