Как определить строки в векторе / списке, которые содержат более одной записи? - PullRequest
0 голосов
/ 05 декабря 2018

Снимок экрана со списком

У меня есть список областей, взятых из пространственной-многогранной структуры данных, в которой теперь есть в основном записи с одним элементом.Тем не менее, некоторые из них содержат 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) # сделать матрицуиндексы и области, превышающие порог

Выходные данные имеют слоты областей, которые могут содержать более одной области, но такая же проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...