2013-04-09 81 views
54

數據幀列表R有什麼區別?哪一個應該在什麼時候使用?哪個更容易循環?R中的數據框和列表有什麼區別?

確切問題:我必須先存儲3個字符串元素,如「a」,「b」,「c」。對於其中的每一個,我需要追加3個元素;例如「a」,我必須添加「a1」,「a2」,「a3」。後來我必須使用嵌套for循環來訪問這些元素。

所以我很困惑使用數據框或列表或其他數據類型,我可以先存儲然後追加(每列的類型)?

目前我得到的錯誤,如「項目,以取代數量不是更換長度的倍數」

+0

我覺得這可能會幫助你.. http://www.r-tutor.com/r-介紹/數據框架和http://www.r-tutor.com/r-introduction/list – Futuregeek 2013-04-09 12:08:02

+0

這真的是個糟糕的問題嗎?我是R的新手,來自java和c#,這種腳本語言似乎很難...... :( – ShazSimple 2013-04-09 12:18:17

+1

@ShazSimple問題本身並不是那麼糟糕,它太籠統了,如果你想解決你的具體問題,你將不得不向我們展示一個最小可重現的例子,如[在這裏]解釋的(http:// stackoverflow。COM /問題/ 5963269 /如何對做 - 一個偉大-R重現-例子)。爲此,請提出一個新問題。我們可以把這個留在這裏作爲參考。 – 2013-04-09 13:16:39

回答

95

的問題不是那麼愚蠢一些人認爲它是。我知道很多人爲這種差異而掙扎,以及在哪裏使用什麼。總結如下:

列表是迄今爲止R中最靈活的數據結構。它們可以看作是元素的集合,對每個元素的類,長度或結構沒有任何限制。唯一需要注意的是,你不要給兩個元素同名。這可能造成了很多混亂,和R不會爲給出錯誤:

> X <- list(a=1,b=2,a=3) 
> X$a 
[1] 1 

數據幀列表爲好,但他們有一些限制:

  • 不能使用兩個不同變量的相同名稱
  • 數據幀的所有元素都是向量
  • 數據幀的所有元素都具有相等的長度。

由於這些限制,將所得的二維結構,數據幀可以模擬天生一些矩陣的行爲。您可以選擇行並對行進行操作。你不能用列表來做這件事,因爲在那裏沒有定義一行。

所有這一切意味着您應該使用適合於該二維結構的任何數據集的數據框。本質上,您使用任何數據集的數據框,其中一列與變量重合,一行與廣義上的單一觀察值一致。對於所有其他結構,列表是要走的路。

請注意,如果你想要一個嵌套結構,你必須使用列表。由於列表元素可以是列表本身,所以可以創建非常靈活的結​​構化對象。

+1

後續問題:我有三個巨大的數據幀,我必須對它們執行一些統一的功能。我應該把它們放在一個列表中,並且應該將它們分開嗎?哪一個會減少我的記憶,並且不太可能釋放我的電腦? – vagabond 2016-02-11 17:27:35

+1

@vagabond我應該檢查一下,但我會懷疑瓶頸是由lapply創建的修改列表。如果你願意,你可以用Rprofmem和tracemem檢查自己。 – 2016-02-11 19:06:48

0

看一下例子: 如果您使用的應用,而不是sapply拿到類 -

apply(iris,2,class) # function elements are rows or columns 
Sepal.Length Sepal.Width Petal.Length Petal.Width  Species 
"character" "character" "character" "character" "character" 

sapply(iris,class) # function elements are variables 
Sepal.Length Sepal.Width Petal.Length Petal.Width  Species 
"numeric" "numeric" "numeric" "numeric"  "factor" 
相關問題