Извлечение имен элементов из вектора в списке - PullRequest
1 голос
/ 07 марта 2019

Я создаю блестящее приложение, и я хотел бы извлечь имя векторного значения из списка для использования в заголовке графика.

У меня есть этот список с именами переменных:

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 ]

1 голос
/ 07 марта 2019

Поскольку это list из именованных vector с, мы можем циклически перебирать list с помощью lapply/sapply извлечения names вектора после сравнения и unlist элементов list вvector (при необходимости)

unlist(sapply(vars, function(x) names(x[x == "ano"])))
0 голосов
/ 07 марта 2019

Это работает с примером "distritos", потому что это только символьный вектор длиной 1 - поэтому, когда вы vars[vars == "distritos"], это соответствует значению этого вектора.

Вам нужно либо проверить имена в списке (не имена каждого отдельного вектора символов), либо посмотреть на нижний уровень, используя что-то вроде этого:

l <- "ano"
names(vars[sapply(vars, function(x) l %in% x)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...