如何用向量化函数结合paste0实现名字与对应数字的组合?
解决方案
首先构造与名字向量一一对应的数字序列列表(每个元素对应一个名字的数字序列),再用配对拼接函数完成任务:
# 定义原始名字向量 names <- c("a", "b", "c", "d", "e", "f", "g", "h") # 定义每个名字对应的数字序列列表(顺序与names完全匹配) num_list <- list(0, 0:2, 0:3, 0:1, 0:1, 0, 0, 0) # 方法1:使用基础包的mapply result <- unlist(mapply(paste0, names, num_list)) # 方法2:使用purrr包的map2 + flatten_chr library(purrr) result <- flatten_chr(map2(names, num_list, paste0))
执行后得到的结果与预期完全一致:
> result [1] "a0" "b0" "b1" "b2" "c0" "c1" "c2" "c3" "d0" "d1" "e0" "e1" "f0" "g0" "h0"
之前代码错误的原因
- 直接用
paste0(names, numbers)时,numbers是合并后的长度为15的向量,而names长度为8,R的循环回收规则无法正确匹配每个名字对应的数字序列,导致拼接混乱。 paste0(names, numbers |> as.list())是将每个名字与整个数字列表拼接,而非对应位置的数字序列,结果自然错误。purrr::map_chr(names, paste0(c(...)))的参数逻辑错误:map_chr会将每个名字作为第一个参数传给paste0,但第二个参数是固定的整个数字向量,相当于每个名字都和所有数字拼接,不符合需求。
内容的提问来源于stack exchange,提问作者a.sa.5969
相关产品推荐
相关产品推荐

