是否可以掃描具有特定名稱的元素的列表的列表並更改其數據類型但保留其值?更改嵌套列表中元素的數據類型
作爲一個例子,包含元素類「字符」或「數字」
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」)'。 –
是的,但這是因爲這個解決方案改變了所有的元素,它不會爲任意的複雜性工作 - 我已經改變了這個例子,使這個更清晰 –