gpt4 book ai didi

r - 如何根据对象索引合并两个列表 - 保持属性?

转载 作者:行者123 更新时间:2023-12-02 11:16:48 26 4
gpt4 key购买 nike

我想合并两个列表以保留每个对象的索引:

mylist<-list(1,NULL,2)
otherlist<-list(NULL,3,NULL,4,5,6)

# Desired

list(1,3,2,4,5,6)

# my try:

suppressWarnings(mapply(c, mylist, otherlist) )

答案应该是普遍的

编辑:为了避免类似问题的扩散。我决定在这里也请求保留属性的可能性(最好是带有基数)。
mylist<-list(1,NULL,2)
attr(mylist[[1]],"at")<-"a"
attr(mylist[[3]],"at")<-"c"

otherlist<-list(NULL,3,NULL,4,5,6)

attr(otherlist[[2]],"at")<-"b"
attr(otherlist[[4]],"at")<-"d"
attr(otherlist[[5]],"at")<-"e"
attr(otherlist[[6]],"at")<-"f"

最佳答案

这是我们使用 lengths 创建逻辑索引的选项。 (当存在 NULL 时将返回 0)并使用 mylist 分配元素未上市

otherlist[lengths(otherlist) == 0] <- unlist(mylist)
otherlist
#[[1]]
#[1] 1

#[[2]]
#[1] 2

#[[3]]
#[1] 3

#[[4]]
#[1] 4

#[[5]]
#[1] 5

#[[6]]
#[1] 6

如果我们需要使用 Map , 确保 lengths对于相应的元素是相同的
otherlist[seq_along(mylist)] <- Map(c, otherlist[seq_along(mylist)], mylist)

更新

对于更新的示例
i1 <- sapply(otherlist, is.null)
i2 <- !sapply(mylist, is.null)
otherlist[i1] <- mylist[i2]

otherlist
#[[1]]
#[1] 1
#attr(,"at")
#[1] "a"

#[[2]]
#[1] 3
#attr(,"at")
#[1] "b"

#[[3]]
#[1] 2
#attr(,"at")
#[1] "c"

#[[4]]
#[1] 4
#attr(,"at")
#[1] "d"

#[[5]]
#[1] 5
#attr(,"at")
#[1] "e"

#[[6]]
#[1] 6
#attr(,"at")
#[1] "f"

关于r - 如何根据对象索引合并两个列表 - 保持属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59992657/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com