如何解决发出长列表-短列表但保留结构
如果我们想对SO的复杂/大型数据集提出可重复的问题,可以使用dput(head(df))
来减小大小。
是否存在类似的方法来减少具有不同列表长度的复杂嵌套列表的大小?我在想一种方法可能是从每个列表中获取前几个元素(例如前3个),而与单个列表类型(numeric
,character
等)和嵌套结构无关,但我不是确定该怎么做。
#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
或其他任何东西-我只想减小它的大小并保留所有属性等。
谢谢
rapply(L,f = head,n = 3,how = "list")
如果我们在列表中有data.frame
怎么办,该方法将df
拆分为单独的列表(我认为这是可以预期的,因为{{ 1}}电话)?。有没有一种方法可以修改它,使其返回list
作为rapply
。 head(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 举报,一经查实,本站将立刻删除。