我需要帮助创建一个程序,该程序采用字符串向量并将其与数字向量组合。产生(例如)的输出 Apple.1,Orange.1,Peach.1,Apple.2,Orange.2,Peach.2
我目前有
Dispatch
但这不起作用。任何人都可以告诉我我做错了什么吗?感谢。
答案 0 :(得分:0)
我们可以使用outer
c(outer(c("Apple", "Orange", "Peach"), 1:2, FUN = paste, sep="."))
#[1] "Apple.1" "Orange.1" "Peach.1" "Apple.2" "Orange.2" "Peach.2"
答案 1 :(得分:0)
另一种解决方案是使用sapply
c(sapply(c("Apple", "Orange", "Peach"), paste, 1:2, sep = '.'))
如果您希望它们与akrun解决方案的顺序相同,则可以使用t
c(t(sapply(c("Apple", "Orange", "Peach"), paste, 1:2, sep = '.')))
哪种解决方案最快? outer
a <- rep(c("Apple", "Orange", "Peach"), 1000)
b <- 1:50
require(microbenchmark)
microbenchmark(
c(t(sapply(a, paste, b, sep = '.'))),
c(outer(a, b, FUN = paste, sep=".")),
do.call(paste0, expand.grid(a, '.', b))
)
Unit: milliseconds
expr min lq mean median uq max neval
c(t(sapply(a, paste, b, sep = "."))) 76.40193 81.71269 96.04274 88.69873 98.39574 417.0988 100
c(outer(a, b, FUN = paste, sep = ".")) 65.40994 68.89404 80.50559 75.68603 84.45135 164.9048 100
do.call(paste0, expand.grid(a, ".", b)) 87.85504 93.79164 111.43862 104.12434 116.85417 202.7681 100
答案 2 :(得分:0)
如果要组合两个(或更多)向量的所有组合,expand.grid
通常是一个很好的起点。
如果您的成果在x
中,成绩在y
,那么expand.grid(x, ".", y)
会为您提供所需的组合。您只需将它们粘贴在一起,因此完整的解决方案可能是:
do.call(paste0, expand.grid(x, ".", y))