【问题标题】:What is difference between dataframe and list in R?R中的数据框和列表有什么区别?
【发布时间】:2013-03-31 20:10:50
【问题描述】:

R中的dataframelist有什么区别?什么时候应该用哪一个?哪个更容易循环?

确切的问题:我必须先存储 3 个字符串元素,如“a”、“b”、“c”。稍后对于其中的每一个,我需要再附加 3 个元素;例如对于“a”,我必须添加“a1”、“a2”、“a3”。稍后我必须使用嵌套的 for 循环来访问这些元素。

所以我很困惑使用数据框或列表或其他一些数据类型,我可以先在其中存储然后附加(每列的种类)?

目前我遇到错误,例如“要替换的项目数不是替换长度的倍数”

【问题讨论】:

  • 我认为这些可能会对您有所帮助.. r-tutor.com/r-introduction/data-framer-tutor.com/r-introduction/list
  • 真的有那么糟糕的问题吗?我是 R 的新手,来自 java 和 c#,这种脚本语言似乎很难......:(
  • @ShazSimple 这个问题本身并没有那么糟糕。实在是太笼统了。如果您想为您的特定问题提供解决方案,您必须向我们展示一个可重复的最小示例,如 here 所述。为此,请提出一个新问题。我们可以把这个留在这里作为参考。
  • 尽管您确实提供了有关如何尝试完成它的信息,但您似乎仍不清楚您要完成什么。在R 中,回答问题的最佳方式并不总是您可能想的那样,因此更多信息会有所帮助。欢迎来到 SO。
  • @Joris,谢谢你的建议。很快就会发布新问题..

标签: r list dataframe


【解决方案1】:

这个问题并不像某些人认为的那么愚蠢。我知道很多人都在为这种差异而苦苦挣扎,以及在哪里使用什么。总结一下:

列表是 R 中迄今为止最灵活的数据结构。它们可以被视为元素的集合,对每个元素的类、长度或结构没有任何限制。您唯一需要注意的是,不要给两个元素提供相同的名称。这可能会引起很多混乱,而 R 不会为此给出错误:

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

数据框也是列表,但它们有一些限制:

  • 不能为两个不同的变量使用相同的名称
  • 数据框的所有元素都是向量
  • 数据帧的所有元素都具有相同的长度。

由于这些限制和由此产生的二维结构,数据帧可以模仿矩阵的某些行为。您可以选择行并对行进行操作。您不能对列表执行此操作,因为那里未定义行。

所有这些都意味着您应该为适合该二维结构的任何数据集使用数据框。从本质上讲,您可以将数据框用于任何数据集,其中列与变量一致,而行与广义上的单个观察一致。对于所有其他结构,列表是必经之路。

请注意,如果您想要嵌套结构,则必须使用列表。由于列表的元素本身可以是列表,因此您可以创建非常灵活的结​​构化对象。

【讨论】:

  • 后续问题:我有三个巨大的数据框,我必须对它们执行一些统一的功能。我应该将它们放在列表中并lapply 还是应该将它们分开?哪一个对我的记忆力的影响更小,更不可能释放我的电脑?
  • @vagabond 我应该检查一下,但我怀疑瓶颈将是 lapply 创建修改后的列表。如果需要,您可以使用 Rprofmem 和 tracemem 检查自己。
【解决方案2】:

看例子: 如果您使用 apply 而不是 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" 

【讨论】:

    猜你喜欢
    • 2012-01-25
    • 2015-06-07
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 2013-04-03
    • 2016-01-10
    • 1970-01-01
    相关资源
    最近更新 更多