我正在尝试生成一个字符向量,其中包括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")
答案 0 :(得分:5)
这是使用rep
和lapply
的另一种方法。
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)或将rep
与seq
v1 <- rep("", 9)
v1[seq(3, length(v1), by = 3)] <- 1:3
4)或使用paste
和strsplit
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创建