Выполнить итерацию по именованному вектору с использованием списка

#r #vector

#r #вектор

Вопрос:

У меня есть два вектора,

 v <- (TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE)
named.v <- (TRUE = "#FF0000FF", FALSE="#00FF00FF", NA="0000FFFF")
  

Я пытаюсь получить цвет, связанный со значениями в V.

Я пытался сделать это

 named.v[v]
  

Но все, что это делает, это возвращает

         TRUE       FALSE        <NA>        <NA>        <NA>        <NA>        <NA>        <NA>        <NA>        <NA> 
"#FF0000FF" "#00FF00FF" "#0000FFFF"          NA          NA          NA          NA          NA          NA          NA
  

Я действительно застрял и не могу в этом разобраться. Спасибо за помощь!

Ответ №1:

Нам нужно сопоставить набор символов вместо логического. Здесь names ‘named.v’ является character классом (хотя в созданном примере есть несоответствия — в общем, это так)

 named.v[as.character(v)]
#      TRUE        TRUE        TRUE        TRUE        TRUE        TRUE        TRUE        TRUE        TRUE        TRUE 
#"#FF0000FF" "#FF0000FF" "#FF0000FF" "#FF0000FF" "#FF0000FF" "#FF0000FF" "#FF0000FF" "#FF0000FF" "#FF0000FF" "#FF0000FF" 
  

Теперь давайте посмотрим на проблему в коде операционной системы, поскольку ‘v’ является logical , истинно подразумевая, что следует выбрать это значение, Но ‘named.v’ имеет длину 3, в то время как логический вектор имеет длину 10, поэтому после выбора первых 3 из ‘named.v’ ничего не осталось, поэтому оно отсутствует и NA представляет отсутствующее значение

данные

 v <- c(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE)
named.v <- c(`TRUE` = "#FF0000FF", `FALSE`="#00FF00FF", `NA`="0000FFFF")
  

Комментарии:

1. Боже мой. Большое вам спасибо, это ломало мне голову. Все еще изучаю основы R, поскольку обычно я привык к Python.