如何生成没有循环的顺序字符向量?

时间:2019-06-18 14:46:21

标签: r

我正在尝试生成一个字符向量,其中包括n个数字(作为字符)的序列,每个数字元素之间有m个空字符串元素。

我设法使用循环生成矢量。有没有一种方法可以更简洁地实现而不循环,这样会更有效吗?

sequence = character(0)
n = 3
m = 2

for(i in 1:n){
  sequence <- c(sequence, rep("",m), i)
  i <- i + 1
}

输出是像这样的向量:

c("","","1","","","2","","","3")

4 个答案:

答案 0 :(得分:5)

这是使用replapply的另一种方法。

seq_fun <- function(n, m){
  unlist(lapply(1:n, function(x) c(rep("", times = m), x)))
}

seq_fun(3, 2)
# [1] ""  ""  "1" ""  ""  "2" ""  ""  "3"

答案 1 :(得分:4)

1)创建一个m×n矩阵“”,并将其底部的1:n rbind。然后将其分解为向量:

c(rbind(matrix("", m, n), 1:n))
## [1] ""  ""  "1" ""  ""  "2" ""  ""  "3"

2)另一种方法是创建一个m1 * n长向量“”,并将位置m1 *(1:n)替换为1:n。

m1 <- m + 1
replace(character(m1 * n), m1 * (1:n), 1:n)
## [1] ""  ""  "1" ""  ""  "2" ""  ""  "3"

或者,我们可以使用逻辑第二个参数:

replace(character(m1 * n), c(logical(m), TRUE), 1:n)
## [1] ""  ""  "1" ""  ""  "2" ""  ""  "3"

答案 2 :(得分:3)

1)我们可以使用lapply创建vector

unlist(lapply(1:3, function(x) c("", "", x)))
#[1] ""  ""  "1" ""  ""  "2" ""  ""  "3"

2)或使用rep

replace(rep("", 9), c(FALSE, FALSE, TRUE), 1:3)
#[1] ""  ""  "1" ""  ""  "2" ""  ""  "3"

3)或将repseq

一起使用
v1 <- rep("", 9)
v1[seq(3, length(v1), by = 3)] <- 1:3

4)或使用pastestrsplit

unlist(strsplit(sprintf("  %d", 1:3), " "))
#[1] ""  ""  "1" ""  ""  "2" ""  ""  "3"

没有使用软件包

答案 3 :(得分:0)

一种简洁的方式:

library(purrr)

map2(1:3, 2, ~ c(rep("", .y), .x)) %>% unlist()
#> [1] ""  ""  "1" ""  ""  "2" ""  ""  "3"

reprex package(v0.3.0)于2019-06-18创建