R语言 使用lapply将0矢量名称粘贴到矢量值

thtygnil  于 2022-12-20  发布在  其他
关注(0)|答案(2)|浏览(116)

在以下情况下如何使用lapply。
干杯JF
输入列表

dmx <- list(d2 = c("PT", "16", "0603"),
            d3 = "T")

预期输出列表

dmx2 <- list(c("Dim2=PT", "Dim2=16", "Dim2=0603"),
             "Dim3=T")

目的是将0“Dim#=”粘贴到每个值,其中#代表矢量名称中的数字。
直到知道我在用

for (i in 1:length(dmx)) {
    dmx[[i]] <- paste0("Dim",substr(names(dmx[i]), 2, 2), "=",  dmx[[i]])
  }

但是我注意到应用函数可以更有效。

xam8gpfp

xam8gpfp1#

你可以使用lapply来处理索引或名称(但不要指望它会快很多):
使用索引(保证安全):

lapply(seq_along(dmx),
       \(x) paste0(sub("d(\\d)", "Dim\\1=", names(dmx)[[x]]), dmx[[x]]))

或者直接使用名称(在边缘情况下可能不起作用,但99/100):

lapply(names(dmx),
       \(x) paste0(sub("d(\\d)", "Dim\\1=", x), dmx[[x]]))

您可以使用substr-表达式来代替sub。只是显示一个regex-替代项。
输出:

[[1]]
[1] "Dim2=PT"   "Dim2=16"   "Dim2=0603"

[[2]]
[1] "Dim3=T"

数据:

dmx <- list(d2 = c("PT", "16", "0603"),
d3 = "T")

**更新。**如果不是为了速度,我们可以stackunstack

stack_dmx <- stack(dmx)
stack_dmx$values <- paste0(sub("d(\\d)", "Dim\\1=", stack_dmx$ind), stack_dmx$values)
unstack(stack_dmx)
yks3o0rb

yks3o0rb2#

使用tidyverse

library(purrr)
library(stringr)
 imap(dmx, ~ sprintf("%s=%s", str_replace(.y, "d", "Dim"), .x))
  • 输出
$d2
[1] "Dim2=PT"   "Dim2=16"   "Dim2=0603"

$d3
[1] "Dim3=T"

相关问题