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

问题描述

如果我们想对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")

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...