vec <- c(1, 3, 2, 37)
Run Code Online (Sandbox Code Playgroud)
我想连续连接这个向量,使得输出看起来像这样:
> output
[[1]]
[1] 1
[[2]]
[1] 1 3
[[3]]
[1] 1 3 2
[[4]]
[1] 1 3 2 37
Run Code Online (Sandbox Code Playgroud)
我编写了一个函数来执行此操作,但它没有给我正确的输出:
myfun <- function(vec){
output = vector("list", length(vec))
output[[1]] = vec[1]
for(i in 2:length(vec)){
output[[i]] = paste(output[[i - 1]], vec[i])
output[[i]] = as.numeric(strsplit(output[[i]], " ")[[1]])
}
return(output)
}
> myfun(c(1, 3, 2, 37))
[[1]]
[1] 1
[[2]]
[1] 1 3
[[3]]
[1] 1 2
[[4]]
[1] 1 37
Run Code Online (Sandbox Code Playgroud)
执行此操作的直接方法是Reduce:
Reduce(f = c,x = vec,accumulate = TRUE)
Run Code Online (Sandbox Code Playgroud)
有一个purrr::accumulate函数可以完成同样的事情:
purrr::accumulate(.x = vec,.f = c,.simplify = FALSE)
Run Code Online (Sandbox Code Playgroud)
(编辑以合并注释以用作c()函数,简单得多。)