Построение полигонов в R, когда диапазон y является символьным вектором

#r #polygons

#r #полигоны

Вопрос:

У меня есть некоторый код построения, который я использовал ранее с данными, которые являются числовыми или целочисленными. Теперь у меня есть похожие данные, за исключением того, что один столбец — это символьные данные, какие?полигон говорит, что я могу использовать. Я боролся с этим и не могу решить ошибки, которые я получаю. Помогите, пожалуйста!

Мои данные:

 Dem.plotting <- data.frame(
  Group=c(1, 1, 1, 2, 2, 2, 3, 3, 3),
  Year=c("2012", "Dem", "Non-dem", "2012", "Dem", "Non-dem", "2012", 
          "Dem", "Non-dem"),
  minGDP=c(17.1, 17.3, 20.2, 19.8, 20.3, 21.7, 20.7, 21.7, 22.6),
  maxGDP=c(19.4, 20.3, 21.5, 20.5, 21.3, 21.9, 21.4, 22.5, 22.3),
  Data=data.frame(Group, Year, minGDP, maxGDP))
 

Это код, который я успешно использовал раньше, но сейчас не работает:

 yrange = range(Dem.plotting$Year)
xrange = range(Dem.plotting[,3:4])
plot(Year~minGDP,data=Dem.plotting,type="n",xlab="Log(GDP)",ylab="Year",
     ylim=yrange,xlim=xrange)
dens = c(NA,20,40,NA,20,40,NA,20)
ang = rep(45,times=8)
fillcol = c("white","gray","gray","black","black","black","white","gray")
for (i in 1:nrow(Dem.plotting)){
  with(Dem.plotting[i,],polygon(x=c(minGDP,maxGDP,maxGDP,minGDP),
                        y=c(Year 0.25,Year 0.25,Year-0.25,Year-0.25),
                        density=dens[Group],ang=ang,
                        col=fillcol[Group],
                        border="black"
 )
 )
}
 

Я получаю следующую ошибку при попытке настроить пустой график:

 Error in plot.window(...) : invalid 'ylim' value
In addition: Warning message:
In xy.coords(x, y, xlabel, ylabel, log) : NAs introduced by coercion
 

Итак, R не нравится иметь символьный вектор для «Года», и я не знаю, как это исправить, а затем эта ошибка генерируется при попытке построить полигоны:

 Error in Year   0.25 : non-numeric argument to binary operator
 

Я понимаю, что ему не нравится, что «Год» является символьным, а не числовым, но я подумал, что вы могли бы строить полигоны, используя символьные данные для вершин?

Любая помощь приветствуется!

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

1. Я не думаю, что вы можете использовать символьные аргументы для polygon() . Я не уверен, откуда у вас такое впечатление в файле справки.

2. стрелять. Я думаю, вы правы. Вы можете использовать символьные объекты в диапазоне, но вы правы, это не говорит об этом для polygon.

3. Какого результата вы ожидаете? Просматривая ваш код, первая ошибка, конечно, выдается range(Dem.plotting$Year) . Каким будет диапазон символьной переменной (которая содержит строку «2012»)?

4. Я подумал, что это будет похоже на «уникальный» и будет набором уникальных строк в диапазоне.