如何将向量的第 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"
但是有没有更简单或更聪明的方法,使用 lapply
或 tidyverse
?我尝试了以下但没有得到我想要的:
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
根据 list
的 lengths
、unlist
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"
我有一个包含第 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"
但是有没有更简单或更聪明的方法,使用 lapply
或 tidyverse
?我尝试了以下但没有得到我想要的:
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
根据 list
的 lengths
、unlist
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"