如何将向量的第 i 个元素粘贴到向量列表的第 i 个元素

How to paste ith element of vector to ith element of list of vector

我有一个包含第 n 个元素的向量和一个包含相同数量元素的列表,每个都是一个向量。对于一个简单的等效示例:

v <- c("a","b")
num1 <- c(1,2,3)
num2 <- c(10,20,30)
numList <- list(num1,num2)

我想要的输出是:

"a1"  "a2"  "a3"  "b10" "b20" "b30"

我可以用 for 循环来做到这一点:

output <- vector() 
for (i in 1:length(v)) {
  output <- c(output, paste0(v[i], numList[[i]]))
}
output

[1] "a1"  "a2"  "a3"  "b10" "b20" "b30"

但是有没有更简单或更聪明的方法,使用 lapplytidyverse?我尝试了以下但没有得到我想要的:

lapply(numList, function(x) paste0(v, x))

我们可以用Map代替lapply

unname(unlist(Map(paste0, v, numList)))

-输出

[1] "a1"  "a2"  "a3"  "b10" "b20" "b30"

stack一个名为list的两列data.frame并应用paste一次

with(stack(setNames(numList, v)), paste0(ind, values))
[1] "a1"  "a2"  "a3"  "b10" "b20" "b30"

或者更快的版本是rep根据 listlengthsunlist list 构造 'v' ] 和 paste

paste0(rep(v, lengths(numList)), unlist(numList))
[1] "a1"  "a2"  "a3"  "b10" "b20" "b30"

或使用 purrr

中的 map2
library(stringr)
library(purrr)
map2(v, numList, str_c) %>%
    flatten_chr
[1] "a1"  "a2"  "a3"  "b10" "b20" "b30"

我们可以尝试下面的基本 R 代码

> c(sapply(seq_along(v), function(k) paste0(v[k], numList[[k]])))
[1] "a1"  "a2"  "a3"  "b10" "b20" "b30"