2012-02-29 56 views
3

我想將類對象放到一個數組中,所以我可以引用多個類對象。然而,當我把它放入數組中時,類信息似乎消失了。我該如何解決?如何在R中創建一個類的數組?

+4

把你的對象列表來代替。如果你用一些數據和代碼創建一個小例子,有人可以幫助你。 – Andrie 2012-02-29 10:24:26

+0

@Andrie哎呀,對不起,偷了你的答覆/評論。當我開始寫我的答案時,沒有任何評論(在項目會議中多任務處理 - 不是wifi很棒!) – 2012-02-29 10:46:50

+0

@Gavin:什麼?會議期間你沒有忙於FB嗎? :-) – 2012-02-29 12:30:36

回答

7

數組不是正確的工具,因爲它們是原子的(所以只允許一種基本類型的數據),並且只允許數字或字符數據。列表是R中的通用向量,因此列表中的每個組件都可以包含任何類型的對象。

下面是兩個用戶定義S3的類的例子:我想你誤解的概念「陣列」在R中的R的陣列不是不同對象的矢量,但一個多維對象

> foo <- 1:10 
> class(foo) <- "foo" 
> bar <- "a" 
> class(bar) <- "bar" 
> 
> obj <- list(foo = foo, bar = bar) 
> obj 
$foo 
[1] 1 2 3 4 5 6 7 8 9 10 
attr(,"class") 
[1] "foo" 

$bar 
[1] "a" 
attr(,"class") 
[1] "bar" 
5

只有一個類的元素。 A list是可以用來存儲任何你想要的R對象。如果你願意,你甚至可以給它尺寸,這樣你就可以得到一個多維列表,它將與你描述的數組相對應。這必須用雙方括號索引。

例子:

# A list with different objects: 
foo <- list("A","B","C","D",1,2,3,4,TRUE,TRUE,FALSE,FALSE) 

# Add dimensions: 
dim(foo) <- c(2,2,3) 
> foo 
, , 1 

    [,1] [,2] 
[1,] "A" "C" 
[2,] "B" "D" 

, , 2 

    [,1] [,2] 
[1,] 1 3 
[2,] 2 4 

, , 3 

    [,1] [,2] 
[1,] TRUE FALSE 
[2,] TRUE FALSE 

# index row 1 col 1 slice 1 
> foo[[1,1,1]] 
[1] "A" 
相關問題