R: результаты от агрегата с несколькими функциями, которые нельзя использовать в дальнейших вычислениях. ЗАЧЕМ?

Привет пользователям Stackoverflow,

У меня есть проблема, связанная с результатами агрегатной функции в R. Моя цель - выбрать определенные виды птиц из набора данных и рассчитать плотность наблюдаемых особей на исследуемой территории. Для этого я взял подмножество основного файла данных, затем агрегировал по области, вычисляя среднее значение и количество особей (представленных длиной вектора). Затем я хотел использовать рассчитанную среднюю площадь и количество особей для расчета плотности. Это не сработало. Код, который я использовал, приведен ниже:

> head(data)

  positionmonth positionyear quadrant           Species  Code sum_areainkm2

1             5         2014        1 Bar-tailed Godwit  5340      155.6562

2             5         2014        1 Bar-tailed Godwit  5340      155.6562

3             5         2014        1 Bar-tailed Godwit  5340      155.6562

4             5         2014        1 Bar-tailed Godwit  5340      155.6562

5             5         2014        1            Gannet   710      155.6562

6             5         2014        1 Bar-tailed Godwit  5340      155.6562


sub.gannet<-subset(data, species == "Gannet")

sub.gannet<-data.frame(sub.gannet)


x<-sub.gannet

aggr.gannet<-aggregate(sub.gannet$sum_areainkm2, by=list(sub.gannet$positionyear, sub.gannet$positionmonth, sub.gannet$quadrant, sub.gannet$Species, sub.gannet$Code), FUN=function(x) c(observed_area=mean(x), NoInd=length(x)))

names(aggr.gannet)<-c("positionyear", "positionmonth", "quadrant", "species", "code", "x")

aggr.gannet<-data.frame(aggr.gannet)


> aggr.gannet

  positionyear positionmonth quadrant species code x.observed_area x.NoInd

1         2014             5        4  Gannet  710         79.8257 10.0000


density <- c(aggr.gannet$x.NoInd/aggr.gannet$x.observed_area)

aggr.gannet <- cbind(aggr.gannet, density)

Error in data.frame(..., check.names = FALSE) : 

  Arguments imply differing number of rows: 1, 0

> density

numeric(0)

> aggr.gannet$x.observed_area

NULL

> aggr.gannet$x.NoInd

NULL

Похоже, что R не рассматривает результаты от функции (seen_area и NoInd) как числовые значения самостоятельно. Это было уже очевидно, когда я не мог дать им имя каждому, но должен был назвать их «х».

Может кто-нибудь, пожалуйста, скажите мне, почему это происходит. Как я могу рассчитать плотность в этих условиях? Или есть другой способ объединить несколько функций по одной и той же переменной, что приведет к полезному выводу?

Любые идеи будут с благодарностью, спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос