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

如何让R中的lapply/sapply输出带命名的列表?

如何让R中的lapply/sapply输出带命名的列表?

嗨,我来帮你搞定这个问题!你想要的是用lapply或sapply生成带有variables里原名称的列表对吧?咱们一步步来解决:

首先看你用lapply的情况:它确实能正确提取对应元素,但返回的是没有命名的列表。要给这个列表加上你想要的名字,只需要用setNames()函数把variables中的值作为列表的名称即可,代码如下:

input <- list("Subject-Identifier" = c("1022", "1023", "1024"),
              "Next-Screening" = c("A", "B", "C"))
variables <- c("Subject Identifier", "Next Screening")

res <- setNames(lapply(variables, function(x){
  input[[stringr::str_replace_all(x, " ", "-")]]
}), variables)

运行后就能得到你想要的结构:

$`Subject Identifier`
[1] "1022" "1023" "1024"

$`Next Screening`
[1] "A" "B" "C"

再来说sapply的问题:你之前用sapply得到了矩阵,是因为sapply默认会简化结果(当每个元素长度一致时,会把列表转为矩阵/数据框)。如果想让它保持列表结构并保留命名,只需要加上SIMPLIFY = FALSE参数就行(USE.NAMES = TRUE其实是默认值,加上更明确):

res <- sapply(variables, function(x){
  input[[stringr::str_replace_all(x, " ", "-")]]
}, SIMPLIFY = FALSE, USE.NAMES = TRUE)

运行这段代码后,同样能得到带命名的列表结构,不会被简化成矩阵。

另外你提到这是Shiny中的响应式input元素,放心,这两种方法完全适用,只要input的结构和你示例中的一致就没问题~

备注:内容来源于stack exchange,提问作者mandmeier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 10:42:42