Итерация по именованному вектору с использованием списка - PullRequest
2 голосов
/ 30 марта 2019

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

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 Ответ

5 голосов
/ 30 марта 2019

Нам нужно сопоставить набор символов вместо логического.Здесь 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" 

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

data

v <- c(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE)
named.v <- c(`TRUE` = "#FF0000FF", `FALSE`="#00FF00FF", `NA`="0000FFFF")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...