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
相关产品推荐
相关产品推荐

