Построение составляющих фракций в SoilProfileCollection в пакете R, apg

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

Это мой код до сих пор:

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

Предупреждение очень полезно в этом случае. Функция 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 и так что условие оценивается как истинное, и hi впоследствии печатается.

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

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

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

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

Другие вопросы по тегам