如何使用一些长度的NULL扩展列表?

时间:2011-11-11 17:57:33

标签: list r null resize fill

给定一个长度为<= N的列表,最好/最有效的方法是用尾随NULL填充长度(使其长度为N)。

这是任何体面语言中的单行,但我不知道如何在R中的几行中(有效地)这样做,以便它适用于每个角落的情况(零长度列表)等)。

6 个答案:

答案 0 :(得分:7)

让我们保持简单:

tst<-1:10 #whatever, to get a vector of length 10
tst<-tst[1:15]

答案 1 :(得分:6)

试试这个:

> l = list("a",1:3)
> N = 5
> l[N+1]=NULL
> l
[[1]]
[1] "a"

[[2]]
[1] 1 2 3

[[3]]
NULL

[[4]]
NULL

[[5]]
NULL

>

答案 2 :(得分:5)

这个怎么样?

> l = list("a",1:3)
> length(l)=5
> l
[[1]]
[1] "a"

[[2]]
[1] 1 2 3

[[3]]
NULL

[[4]]
NULL

[[5]]
NULL

答案 3 :(得分:4)

据我所知,直接编辑列表的长度似乎是最快的:

tmp <- vector("list",5000)
sol1 <- function(x){
    x <- x[1:10000] 
}
sol2 <- function(x){
    x[10001] <- NULL
}
sol3 <- function(x){
    length(x) <- 10000
}

library(rbenchmark)
benchmark(sol1(tmp),sol2(tmp),sol3(tmp),replications = 5000)
       test replications elapsed relative user.self sys.self user.child sys.child
1 sol1(tmp)         5000   2.045 1.394952     1.327    0.727          0         0
2 sol2(tmp)         5000   2.849 1.943383     1.804    1.075          0         0
3 sol3(tmp)         5000   1.466 1.000000     0.937    0.548          0         0

但差异不是很大,除非你在非常长的名单上这么做,我想。

答案 4 :(得分:1)

我确信有更短的方法,但我倾向于这样做:

l <- as.list(1:10)
N <- 15
l <- c(l, as.list(rep(NA, N - length(l) )))

答案 5 :(得分:0)

嗨:我不确定你是在谈论一个真实的清单,但如果你是,那么下面就可以了。它的工作原理是,一旦你访问了不存在的向量元素(列表是),R就会将向量扩展到该长度。

length <- 10
temp <- list("a","b")
print(temp)
temp[length] <- NULL
print(temp)