Функция, определяющая ответ по вектору - PullRequest
1 голос
/ 22 октября 2011

Глядя, чтобы научиться писать функции. У меня есть данные, изложенные в следующем (например,):

Genus Species  Wing  Tail
 A       X     10.5  20.3
 A       Y     10.7  20.7
 B       XX    15.2  22.5
 B       XY    15.5  24

Я вычисляю дисперсию для данной черты, используя уравнение:

 sqrt(max(Wing) - min (Wing))

, которую я суммирую по всем признакам.

Итак, я могу написать следующую функцию, чтобы суммировать дисперсию для всего набора данных:

variance<- function(data){
t   <- sqrt(max(Tail)-min(Tail))
w   <- sqrt(max(Wing)-min(Wing))
x <- sum(t,w)
x
}

Но я не могу понять, как сгенерировать ответ, чтобы дать мне вывод, где этот результат зависит от рода. Так что я хочу сгенерировать вывод как:

 Genus A    Genus B
  2.345      3.456

1 Ответ

3 голосов
/ 22 октября 2011

Я собираюсь дать новое имя вашей функции, потому что неправильно называть ее «дисперсией». Я надеюсь, что вы можете пропустить это. Мы можем работать с объектом dataframe

dput(dfrm)
structure(list(Genus = structure(c(1L, 1L, 2L, 2L), .Label = c("A", 
"B"), class = "factor"), Species = structure(c(1L, 4L, 2L, 3L
), .Label = c("X", "XX", "XY", "Y"), class = "factor"), Wing = c(10.5, 
10.7, 15.2, 15.5), Tail = c(20.3, 20.7, 22.5, 24)), .Names = c("Genus", 
"Species", "Wing", "Tail"), class = "data.frame", row.names = c(NA, 
-4L))

dev2<- function(df){
    t   <- sqrt(max(df[["Tail"]])-min(df[["Tail"]]))
    w   <- sqrt(max(df[["Wing"]])-min(df[["Wing"]]))
    x <- sum(t,w)
   x
   }

Теперь используйте его для работы с полным фреймом данных, используя стратегию split-lapply, которая передает разделы исходного фрейма данных, определенные значениями Genus, в функцию dev2

lapply( split(dfrm, list(dfrm$Genus)), FUN = dev2)
$A
[1] 1.079669

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