微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

发出长列表-短列表但保留结构

如何解决发出长列表-短列表但保留结构

如果我们想对SO的复杂/大型数据集提出可重复的问题,可以使用dput(head(df))来减小大小。

是否存在类似的方法来减少具有不同列表长度的复杂嵌套列表的大小?我在想一种方法可能是从每个列表中获取前几个元素(例如前3个),而与单个列表类型(numericcharacter等)和嵌套结构无关,但我不是确定该怎么做。

#sample nested list
L <- list(
  list(1:10),list( list(1:10),list(1:10,1:10) ),list(list(list(list(1:10))))
)

运行dput(L)自然会为整个列表生成结构。有没有一种简单的方法可以减少此列表的总长度(类似于dput(head(L))

我不想编辑列表的结构,例如我不想首先flatten或其他任何东西-我只想减小它的大小并保留所有属性等。

谢谢

修改

@thelatemail解决方效果很好:

rapply(L,f = head,n = 3,how = "list")

如果我们在列表中有data.frame怎么办,该方法df拆分为单独的列表(我认为这是可以预期的,因为{{ 1}}电话)?。有没有一种方法可以修改它,使其返回list作为rapplyhead(df)包括

data.frame

编辑2

似乎df无法在L_with_df <- list( list(1:10),1:10),df = data.frame(a = 1:20,b = 21:40) ),list(list(list(list(1:10)))) ) rapply(L_with_df,how = "list") 上运行,请参阅here

但是,rapply的扩展名data.frames here似乎可以满足我的要求:

rrapply

解决方法

让我们创建一个嵌套列表作为示例。

L <- list(
  list(1:10),list( list(1:10),list(1:10,1:10) ),list(list(list(list(1:10))))
)

具有以下结构:

str(L)
#List of 3
# $ :List of 1
#  ..$ : int [1:10] 1 2 3 4 5 6 7 8 9 10
# $ :List of 2
#  ..$ :List of 1
#  .. ..$ : int [1:10] 1 2 3 4 5 6 7 8 9 10
#  ..$ :List of 2
#  .. ..$ : int [1:10] 1 2 3 4 5 6 7 8 9 10
#  .. ..$ : int [1:10] 1 2 3 4 5 6 7 8 9 10
# $ :List of 1
#  ..$ :List of 1
#  .. ..$ :List of 1
#  .. .. ..$ :List of 1
#  .. .. .. ..$ : int [1:10] 1 2 3 4 5 6 7 8 9 10

我认为,使用具有rapply的{​​{1}}联合的递归应用f=可以处理此问题而不会破坏结构。

head

签出:

rapply(L,f=head,n=3,how="list")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。