我有一个字符列表,我希望以一种获取每个值然后复制它的方式返回列表,并用连字符分隔它。例如:
"12", "34", "56", "78"
会变成
"12-12", "34-34", "56-56", "78-78"
这一切都可能吗?
答案 0 :(得分:0)
以下是可以在不键入的情况下创建相同字符串2次的方法,例如paste(x, x, x, ..., sep = "-")
。我们可以使用rep
和paste
定义函数,然后使用sapply
循环遍历向量。 vec2
是最终输出。
# Create example vector
vec1 <- c("12", "34", "56", "78")
# Design a function to repeat a string and concatenate by "-"
conc_fun <- function(string, times = 2){
# The argument "times" allows the users to specify how many times to repeat
temp_vec <- rep(string, each = times)
temp_string <- paste(temp_vec, collapse = "-")
return(temp_string)
}
# Apply the conc_fun to vec1
vec2 <- sapply(vec1, conc_fun)
或者我们可以使用相同的内容创建matrix
,然后使用apply
和paste
。
vec2 <- apply(matrix(rep(vec1, 2), nrow = 2, byrow = TRUE), 2, paste, collapse = "-")
定义conc_fun
函数后,第一种方法(使用sapply
)和第二种方法(使用matrix
和apply
)之间没有显着差异表现条款。对我来说,两者都是有效的。
library(microbenchmark)
microbenchmark(
m1 = {vec2 <- sapply(vec1, conc_fun)},
m2 = {vec2 <- apply(matrix(rep(vec1, 2), nrow = 2, byrow = TRUE), 2, paste, collapse = "-")}
)
Unit: microseconds
expr min lq mean median uq max neval
m1 28.867 30.150 35.57701 31.433 35.6025 119.958 100
m2 30.150 32.075 41.57487 33.358 42.0175 147.541 100