Построение составляющих фракций в 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"
Нет предупреждений!
Надеюсь, что это ответ на ваш вопрос!