从列表中的向量中提取元素名称

时间:2019-03-07 15:08:17

标签: r

我正在构建一个闪亮的应用程序,我想在列表中提取矢量值的名称以用于绘图标题。

我有一个带有变量名的列表:

vars <- list(
  acidentes = c("Veículo" = "veic", "Tipo de acidente" = "tipo_acid",
                "# ciclistas" = "ciclistas"),
  vitimas = c("Sexo" = "sexo", "Idade" = "idade"),
  tempo = c("Ano" = "ano", "Mes" = "mes", "Dia da semana" = "dia_semana",
            "Hora do dia" = "hora_dia", "Período do dia" = "periodo_dia"),
  geo = c("Distritos" = "distritos")
)

vars

$acidentes
Veículo Tipo de acidente      # ciclistas 
"veic"  "tipo_acid"           "ciclistas" 

$vitimas
Sexo   Idade 
"sexo" "idade" 

$tempo
Ano    Mes    Dia da semana  Hora do dia  Período do dia 
"ano"  "mes"  "dia_semana"   "hora_dia"   "periodo_dia" 

$geo
Distritos 
"distritos" 

在闪亮的内部,我的尝试是:

l <- names(vars[vars == input$variavel])
n <- names(vars[[l]])[vars[[l]] == input$variavel]
tit <- paste("Taxa média de fatalidade, por", n)

我不明白为什么,但是当我选择的是“ distritos”变量而不是另一个变量时,这是可行的。

如果我在带有“ distritos”的闪亮环境之外运行此代码,我会得到:

l <- names(vars[vars == "ano"])
n <- names(vars[[l]])[vars[[l]] == "distritos"]
paste("Taxa média de fatalidade, por", n)
[1] "Taxa média de fatalidade, por Distritos"

但是,如果我调用另一个变量,例如“ anos”,它将无法正常工作。

l <- names(vars[vars == "anos"])
n <- names(vars[[l]])[vars[[l]] == "anos"]
Error in vars[[l]] : attempt to select less than one element in get1index

我尝试使用vars[vars == "anos"]vars[vars %in% "anos"],结果是相同的。适用于“ distritos”,但不适用于其他变量。

为什么这不起作用? 有人对如何执行此操作有想法吗?

对不起,我要说英语,谢谢。

2 个答案:

答案 0 :(得分:1)

由于它是一个名为list的{​​{1}},因此我们可以在vector上遍历list,并在比较后提取向量lapply/sapply并将names的{​​{1}}元素unlist(如有必要)

list

答案 1 :(得分:0)

它与“ distritos”示例一起使用,因为它只是一个长度为1的字符向量-因此,当您vars[vars == "distritos"]时,它与该向量的值匹配。

您需要检查列表中的名称(而不是每个单独的字符向量的名称),或者需要使用类似以下的内容查看较低的级别:

l <- "ano"
names(vars[sapply(vars, function(x) l %in% x)])