考虑以下代码:
b <- list(u=5,v=12)
c <- list(w=13)
a <- list(b,c)
Run Code Online (Sandbox Code Playgroud)
因此,a实际上是列表列表。当我致电a$b或时a$c,为什么NULL返回?同样,如果我呼叫a$u,a$v或a$w,NULL则返回。
以下内容之间也有区别:
c(list(a=1,b=2,c=list(d=5,e=9)))
Run Code Online (Sandbox Code Playgroud)
和
c(list(a=1,b=2,c=list(d=5,e=9)), recursive=T)
Run Code Online (Sandbox Code Playgroud)
索引运算符按名称$对列表进行索引。如果你想从未命名列表中获取第一个元素,你需要.aa[[1]]
您可以创建一个函数,在未指定名称的情况下自动添加名称,类似于data.frame工作方式(此版本是全有或全无 - 如果某些参数被命名,它将不会命名其余的未命名参数)。
nlist <- function(...) {
L <- list(...)
if (!is.null(names(L))) return(L)
n <- lapply(match.call(),deparse)[-1]
setNames(L,n)
}
b <- c <- d <- 1
nlist(b,c,d)
nlist(d=b,b=c,c=d)
Run Code Online (Sandbox Code Playgroud)
对于你的第二个问题,答案是“是”;你尝试过吗???
L <- list(a=1,b=2,c=list(d=5,e=9))
str(c(L))
## List of 3
## $ a: num 1
## $ b: num 2
## $ c:List of 2
## ..$ d: num 5
## ..$ e: num 9
str(c(L,recursive=TRUE))
## Named num [1:4] 1 2 5 9
## - attr(*, "names")= chr [1:4] "a" "b" "c.d" "c.e"
Run Code Online (Sandbox Code Playgroud)
第一个是包含两个数值和一个列表的列表,第二个已被展平为命名的数值向量。
| 归档时间: |
|
| 查看次数: |
4503 次 |
| 最近记录: |