Я не на 100% желаемого результата, но, исходя из вышесказанного, это может исправить:
Использование фиктивных фреймов данных для настройки вашего кода
# create mock data:
dfmock <- data.frame(letter = c(sample(letters[1:3], 25, replace = T)),
position = c(rep(1, 5), rep(2, 5), rep(3, 5), rep(4, 5), rep(5, 5))
)
# create dummy data frame for plot:
dummytest <-data.frame(slots = 1:5, rows = 1:5)
Снова нанесите на график данные
# plot:
plot(dummytest$rows ~ dummytest$slots, type="n", frame=F, axes=F)
axis(1, at=seq(1:5), labels=unique(dfmock$position))
ИСПРАВЛЕНИЕ:
Кажется, ваш цикл FOR итерировал по неверным данным и, таким образом,ваш ifelse
возвращал логический вектор, который не всегда был того же размера, что и данные вашего графика.
# print "a" in positions:
for(i in dfmock$position){
text(i, dummytest$rows, "___", cex=1.75,
col = ifelse(dfmock[dfmock$position==i,]$letter=="a", "red", "grey"))
}
Это привело к приведенному ниже PLOT для dfmock, как показано ниже:
> dfmock[dfmock$letter=="a",]
letter position
4 a 1
8 a 2
12 a 3
13 a 3
14 a 3
21 a 5
25 a 5
![enter image description here](https://i.stack.imgur.com/QdHqt.png)