Построение составляющих фракций в SoilProfileCollection в пакете R, apg - PullRequest
0 голосов
/ 28 мая 2018

У меня проблемы со смещением составляющих дробей на моем графике глубины, так как их верхнее число на каждой глубине 10 см должно быть черным, а второе - синим, не чередуя каждый шаг глубины, как это отображается сейчас.

enter image description here

На данный момент это мой код:

idx_veg <- which(a$LU == 'Vegetated LU')
veg <- slab(a[idx_veg, ], fm= ~ TOC + TIC + Clay + Silt + Sand + Nitrogen..)
idx_mod <- which(a$LU == 'Moderately Degraded LU')
mod <- slab(a[idx_mod, ], fm= ~ TOC + TIC + Clay + Silt + Sand + Nitrogen..)
#combine with the collection-wide aggregate data
g <- make.groups(veg=veg, mod=mod)
xyplot(top ~ p.q50 | variable, groups=which, data=g, ylab='Depth [cm]',
   xlab='median bounded by 25th and 75th percentiles',
   lower=g$p.q25, upper=g$p.q75, ylim=c(60,-2), #ylim defines the y-axis depth
   panel=panel.depth_function,
   alpha=0.15, sync.colors=TRUE, #alpha = transparency of 25-75% interval
   par.settings=list(superpose.line=list(col=c('black', 'RoyalBlue'), lwd=1, lty=c(1,2))), #median line, colour and width
   prepanel=prepanel.depth_function,
   cf=g$contributing_fraction, cf.col=c('black', 'RoyalBlue'), cf.interval=10, #contributing fractions (right hand side x-axis)
   layout=c(6,1), strip=strip.custom(bg=grey(0.8)), #Layout = arrangement of panels of plots
   scales=list(x=list(tick.number=4, alternating=3, relation='free')),# x, y-axis
   auto.key=list(columns=2, lines=TRUE, points=FALSE)
)

Предупреждение, с которым мне нужно иметь дело и которое, вероятно, поможет решить проблему:

In if (is.na(cf.col)) { ... :
the condition has length > 1 and only the first element will be used

Спасибо за любой совет.

1 Ответ

0 голосов
/ 28 мая 2018

Предупреждение очень полезно в этом случае.Функция xyplot() имеет код, который проверяет любое значение NA в параметре cf.col.В вашем случае вы указали cf.col=c('black', 'RoyalBlue') в вызове функции, поэтому код сообщал вам, что проверка NA будет выполняться только для первого элемента, который в вашем случае является значением black.

if(is.na(c(-2,NA,2))) print("hi")
# Warning:
In if (is.na(c(-2, NA, 2))) print("hi") :
  the condition has length > 1 and only the first element will be used

hi не был напечатан, потому что первое значение, -2 не является NA, и, следовательно, условие не выполнено.

Тем не менее, рассмотрим следующий пример:

if(is.na(c(NA,NA,2))) print("hi")
[1] "hi"
Warning message:
In if (is.na(c(NA, NA, 2))) print("hi") :
  the condition has length > 1 and only the first element will be used

Обратите внимание, что на этот раз первым элементом является NA, поэтому условие оценивается как true, и впоследствии выводится hi.

Используемая вами функция, xyplot(), вероятно, ожидала одно значение, а не вектор, следовательно, реализация is.na().Если бы я был автором, я бы добавил дополнительный код, чтобы проверить, был ли это вектор длины 2 и выше перед вызовом is.NA, и вернул бы соответствующее предложение, или использовал бы функцию anyNA или многие другие эквивалентные:

if(anyNA(c(NA,NA,2))) print("hi")
[1] "hi"

Нет предупреждений!

Надеюсь, что это ответ на ваш вопрос!

...