如何在R语言中使用lapply实现向量名称与值的拼接?
用lapply替代for循环给R列表元素添加指定前缀
原始列表:
dmx <- list(d2 = c("PT", "16", "0603"), d3 = "T")
需求:为列表中每个元素的所有值添加前缀Dim#=,其中#是对应元素名称中的数字,最终生成如下结果:
dmx2 <- list(c("Dim2=PT", "Dim2=16", "Dim2=0603"), "Dim3=T")
解决方案(base R)
可以用lapply结合列表名称实现,代码如下:
dmx2 <- lapply(names(dmx), function(nm) { # 提取名称中的数字部分 dim_num <- sub("^d", "", nm) # 拼接前缀和对应值 paste0("Dim", dim_num, "=", dmx[[nm]]) })
如果想更直观地同时处理名称和对应的值,也可以用Map函数(本质是向量化的mapply):
dmx2 <- Map(function(nm, val) { dim_num <- sub("^d", "", nm) paste0("Dim", dim_num, "=", val) }, names(dmx), dmx)
两种方法都能高效完成需求,避免使用for循环。
内容的提问来源于stack exchange,提问作者José Ferreira
相关产品推荐
相关产品推荐

