Снимок экрана со списком
У меня есть список областей, взятых из пространственной-многогранной структуры данных, в которой теперь есть в основном записи с одним элементом.Тем не менее, некоторые из них содержат 2 или иногда 3 области в строке (каждая строка является многоугольником, эти другие области обычно являются отверстиями для справки).Список выглядит примерно так:
arealist =
Name Type Value
arealist list[120] List of length 120
[[1]] double[1] 0.0007
[[2]] double[1] 0.00043
[[3]] double[1] 0.0006
[[4]] double[1] 0.0002
[[5]] double[1] 0.00012 0.0023
[[6]] double[1] 0.0007
Как видите, в строке 5 перечислены 2 области, а в остальных - одна область.Я попробовал следующее:
arealist[length>1]
"Error in length > 1 :
comparison (6) is possible only for atomic and list types"
Но заголовок моего файла arealist говорит 'list [120]', который является списком из 120 элементов.Я прошел и увидел, считается ли это матрицей или вектором, и там написано: вектор или матрица:
is.matrix(arealist)
# [1] FALSE
is.vector(arealist)
# [1] TRUE
Я также попытался:
grep('[length(arealist)>1]',arealist)
Какие только что перечислены индексы строк с 1 по 120.
which(length(arealist[[1:NROW(arealist)]])>1)
# Error in arealist[[1:NROW(arealist)]] :
# recursive indexing failed at level 2
which(length(arealist[[1:120]])>1)
# Error in arealist[[1:120]] : recursive indexing failed at level 2
which(length(arealist[[1:120,]])>1)
# Error in arealist[[1:120, ]] : incorrect number of subscripts
which(length(arealist[[1]])>1)
# integer(0)
which(length(arealist[[112]])>1)
# [1] 1
В моем фактическом списке ареалистов есть 4 случая, когда есть несколько областей, поэтому и 0, и 1 не верны.Какие-нибудь мысли?Спасибо
PS, вот как я получил список областей в многоугольнике ранее:
arealist <- sapply (slot (poly, "polygons"), функция (x) sapply (slot (x, "Polygons"), slot, "area")) </p>
flatarea <- unlist (arealist, use.names = FALSE) #flatten list </p>
maxareatf <- flatarea> 0.02 # дает только истинный / ложный ответ
maxareaidx <- который (maxareatf == TRUE) # с областями, превышающими порог </p>
maxareaidx <- as.numeric (maxareaidx) #сделать числовой класс </p>
maxareasub = подмножество (flatarea, flatarea []> 0.02) # подмножество тех, у кого области больше, чем thresh
maxarea = data.frame (maxareaidx, maxareasub) # сделать матрицуиндексы и области, превышающие порог
Выходные данные имеют слоты областей, которые могут содержать более одной области, но такая же проблема.