是否可以扫描具有特定名称的元素的列表的列表并更改其数据类型但保留其值?更改嵌套列表中元素的数据类型
作为一个例子,包含元素类“字符”或“数字”
x = list(list(N=as.character(1)),
list(a=1,b=2,c="another element",N=as.character(5)),
list(a=2,b=2,N=as.character(7),c=NULL),
list(a=2,b=2,list(N=as.character(3))))
然后应成为“N”以下列表:
x = list(list(N=as.numeric(1)),
list(a=1,b=2,c="another element",N=as.numeric(5)),
list(a=2,b=2,N=as.numeric(7),c=NULL),
list(a=2,b=2,list(N=as.numeric(3))))
为了清楚,溶液应允许更深的嵌套,并且尊重名称不是“N”的字段的数据类型。我一直无法找到适用于任意结构列表的通用解决方案。
我试图沿着this post给出的解决方案的路线的东西:
a <- as.relistable(x)
u <- unlist(a)
u[names(u) == "N"] <- as.numeric(u[names(u) == "N"])
relist(u, a)
不幸的是,取代不工作,这是目前的形式。另外,如果列表包含NULL元素,则relist似乎不起作用。
我看不出如何完成任意的复杂性。您可以使用'rapply'将所有字符强制转换为数字,例如'rapply(x,as.numeric,how =“replace”)'。 –
是的,但这是因为这个解决方案改变了所有的元素,它不会为任意的复杂性工作 - 我已经改变了这个例子,使这个更清晰 –