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

重铸任意深度的嵌套列表

如何解决重铸任意深度的嵌套列表

假设这个简化的例子:

L <- list()

L$Foo <- list()
L$Foo$Bar <- list()
L$Foo$Bar$VAR <- TRUE

L$Lorem <- list()
L$Lorem$Ipsum <- list()
L$Lorem$Ipsum$Dolor <- list()
L$Lorem$Ipsum$Dolor$VAR <- TRUE

然后我会用 reshape2::melt(L) 融化这个列表。这将输出以下内容

  value    L3    L2   L4    L1
1  TRUE   VAR   Bar <NA>   Foo
2  TRUE Dolor Ipsum  VAR Lorem

在对值列中的某些单元格进行一些操作之后,我希望将这个融合的列表重新转换为与 L 完全相同的嵌套列表结构——唯一的区别是我更新了一些 { {1}} 个实例。

任何想法如何实现这一目标?请记住,嵌套列表可以有任何不同的深度。

解决方法

一个选项是 relist,在我们 unlisted L

之后
tmp <- unlist(L)
# make small changes
tmp[] <- FALSE
relist(tmp,L)

结果

$Foo
$Foo$Bar
$Foo$Bar$VAR
[1] FALSE



$Lorem
$Lorem$Ipsum
$Lorem$Ipsum$Dolor
$Lorem$Ipsum$Dolor$VAR
[1] FALSE

L 看起来像

$Foo
$Foo$Bar
$Foo$Bar$VAR
[1] TRUE



$Lorem
$Lorem$Ipsum
$Lorem$Ipsum$Dolor
$Lorem$Ipsum$Dolor$VAR
[1] TRUE
,

另一种方法是在 import 'package:flutter/material.dart'; void main() { runApp( MaterialApp( debugShowCheckedModeBanner: false,title: 'Flutter Demo',home: HomePage(),),); } class HomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( body: Container( padding: EdgeInsets.all(10),margin: EdgeInsets.all(10),decoration: BoxDecoration( border: Border.all(width: 2,color: Colors.black),borderRadius: BorderRadius.all(Radius.circular(10)),child: TextFormField( keyboardType: TextInputType.multiline,minLines: 5,maxLines: 5,style: TextStyle( fontSize: 20,fontWeight: FontWeight.w600,fontFamily: 'Montserrat',decoration: InputDecoration( border: InputBorder.none,hintText: 'Task Description...',hintStyle: TextStyle( fontFamily: 'Montserrat',fontWeight: FontWeight.w400,fontStyle: FontStyle.italic,fontSize: 20,); } } -package 中使用 rrapply(),它具有选项 rrapplyhow = "melt" 在嵌套列表和融合的 data.frames 之间转换:>

how = "unmelt"

相对于library(rrapply) L <- list(Foo = list(Bar = list(VAR = TRUE)),Lorem = list(Ipsum = list(Dolor = list(VAR = TRUE)))) ## melt to data.frame (L1 <- rrapply(L,how = "melt")) #> L1 L2 L3 L4 value #> 1 Foo Bar VAR <NA> TRUE #> 2 Lorem Ipsum Dolor VAR TRUE ## cast back to nested list L2 <- rrapply(L1,how = "unmelt") str(L2) #> List of 2 #> $ Foo :List of 1 #> ..$ Bar:List of 1 #> .. ..$ VAR: logi TRUE #> $ Lorem:List of 1 #> ..$ Ipsum:List of 1 #> .. ..$ Dolor:List of 1 #> .. .. ..$ VAR: logi TRUE identical(L2,L) #> [1] TRUE 的一个重要优点是不需要列表骨架对象(见relist()),因此我们在修改融合数据时不受骨架对象中定义的列表格式的约束.frame,例如:

?relist

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