繁体   English   中英

使用默认的 R 包将嵌套列表定义为向量

[英]Defining nested list into a vector with default R packages

myList <- rep(0, 5)
myList <- list('Aa'= c("1","12"), 'Ba'= c("123","321"), 'Ca'= c("444"))
for (x in names(myList)) {
  for (j in myList[x]) {
    sample <- c(unlist(myList[j]))
  } }

sample

在嵌套列表中,想要将此列表转换为带有

“为了”

环形

如果不定义 function,我无法弄清楚如何提取这些值。

sample <- c(unlist(myList[x])

执行“取消列出”仅使用其他代码即可

> sample
 NULL

但我想要所有,而这个不是那样工作的。 有没有基础版? 无需快速或简单。 仅带有基本的 R 分发包,带有

“不列出”的替代品

如果有可能。

我需要类似的东西

 Aa1 Aa2 Ba1 Ba2 Ca1 "1" "12" "123" "444"

我想我不需要

我的列表 <- 代表(0, 5)

我可能不太明白你的问题,但不

sample <- unlist(myList)
#   Aa1   Aa2   Ba1   Ba2    Ca 
#  "1"  "12" "123" "321" "444" 

或者

sample <- structure(unlist(myList))
#  Aa1   Aa2   Ba1   Ba2    Ca 
#  "1"  "12" "123" "321" "444" 

达到你想要的?

如果我理解你的正确,你想在基础unlist中取消列出而不列出。 你可以这样做:

res <- NULL
for (i in seq(names(myList))) {
  nm <- names(myList)[i]
  l <- myList[[nm]]
  res<- c(res, setNames(l, paste0(nm, seq(l))))
}
res
# Aa1   Aa2   Ba1   Ba2   Ca1 
# "1"  "12" "123" "321" "444" 

查看:

unlist(myList)
# Aa1   Aa2   Ba1   Ba2    Ca 
# "1"  "12" "123" "321" "444" 

我也不得不承认不太了解您要达到的目标,但是如果您想要unlist()的结果而不明确使用 function 您可以尝试rapply() - 尽管默认情况下unlist()正在使用兜帽:

rapply(myList, f = function(x) x)

  Aa1   Aa2   Ba1   Ba2    Ca 
  "1"  "12" "123" "321" "444" 

不太确定为什么要避免unlist ,但这是flatten_chr的替代方案。

len <- lengths(myList)
setNames(purrr::flatten_chr(myList),paste0(rep(names(myList),len),sequence(len)))

#  Aa1   Aa2   Ba1   Ba2   Ca1 
#  "1"  "12" "123" "321" "444" 

如果您可以稍微调整名称,您也可以使用make.unique

setNames(purrr::flatten_chr(myList),make.unique(rep(names(myList), len),sep = ""))

#   Aa   Aa1    Ba   Ba1    Ca 
#  "1"  "12" "123" "321" "444" 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM