首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么rbind()和do.call(rbind )返回不同的结果?

为什么rbind()和do.call(rbind )返回不同的结果?
EN

Stack Overflow用户
提问于 2016-01-28 23:32:51
回答 1查看 25.2K关注 0票数 6

我想用以下代码将列表转换为数据框架:

代码语言:javascript
复制
ls<-list(a=c(1:4),b=c(3:6))
do.call("rbind",ls)

通过添加do.call获得的结果如下所示。它按需要返回一个data.frame对象。

代码语言:javascript
复制
 do.call("rbind",ls)
  [,1] [,2] [,3] [,4]
a    1    2    3    4
b    3    4    5    6

但是,如果我直接使用rbind,它将返回一个列表。

为什么rbind 在这两种情况下的行为不同?

代码语言:javascript
复制
my.df<-rbind(ls)
str(ls)


 my.df
   a         b        
ls Integer,4 Integer,4

 str(ls)
List of 2
 $ a: int [1:4] 1 2 3 4
 $ b: int [1:4] 3 4 5 6
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-29 00:00:22

do.call(rbind, ls)提供与Reduce(rbind, ls)相同的输出。后者的效率较低,但它可以显示您是如何迭代ls中的对象的,而不是直接操作ls (这是一个由2个列表组成的级联列表)。

它们都是通过“取消列表”来操作的,列表中的每个元素都有类numeric。当您使用rbind数值参数时,得到的类是一个矩阵,其中typeof是整数。如果您只是rbind列表,则列表中的每个元素都被认为是一个对象。所以返回的对象是一个matrix对象,它有1行2列和list类型的条目。如果它有1行,就应该表明它将对象ls看作是一件事,而不是两件事。键入rbind(ls, ls, ls)将显示3行2列。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35074200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档