You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中实现带条件的sapply,修正列表键命名问题

问题解决方法

你的问题出在sapply默认会用输入向量的元素作为返回结果的名称,和函数内部的assign操作无关——assign只是在全局环境创建变量,不会修改列表的键名。另外原代码里的substr起始索引错误(R中字符串索引从1开始),改用startsWith判断前缀更可靠。

修正后的代码方案

exp <- c("a", "input_b")

# 第一步:生成每个元素对应的值
values <- sapply(exp, function(x) {
  if (startsWith(x, "input_")) {
    paste0(x, "d")
  } else {
    x
  }
})

# 第二步:修改列表的键名
names(values) <- sapply(exp, function(x) {
  if (startsWith(x, "input_")) {
    gsub("input_", "", x)
  } else {
    x
  }
})

# 转换为列表格式
asd <- as.list(values)
asd

输出结果

$a
[1] "a"

$b
[1] "input_bd"

更简洁的一步式写法

也可以用setNames直接给lapply的结果设置名称:

exp <- c("a", "input_b")

asd <- setNames(
  lapply(exp, function(x) {
    if (startsWith(x, "input_")) paste0(x, "d") else x
  }),
  sapply(exp, function(x) {
    if (startsWith(x, "input_")) gsub("input_", "", x) else x
  })
)

asd

内容的提问来源于stack exchange,提问作者manu p

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 02:00:26