2011-10-21 2 views
1

함수 쓰기를 배우려는 것. I는 다음 (예를 들면)에 배치 된 데이터를 가지고벡터로 답변을 정의하는 함수

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 

I의 식을 이용하여 주어진 특성에 대한 분산을 계산 :

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

I 모든 특성에 대해 요약한다.

은 그래서 전체 데이터 세트에 대한 그래서 합계 분산 다음 함수를 작성할 수 있습니다

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

하지만이 결과는에 의존하는 경우 나에게 출력을 제공하는 응답을 생성하는 방법을 알아 can'twork 속. 그것을 호출하는 단지 잘못 때문에이 함수에 새로운 이름을 부여하기 위하여려고하고있다

Genus A Genus B 
    2.345  3.456 
+0

아, 죄송합니다. 그 함수에 대해서는 깨닫지 못했습니다. –

+0

그리고 임의의 변수의 분산은 범위의 제곱근이 아닙니다. –

+1

Jack M.이 말한 것에 덧붙이면 : 더 많은 수학을 배우고 우수한 온라인 "R 소개 및 자습서"를 읽는 데 시간을 할애해야합니다. R이 Variance 및 Std_deviation 함수를 가질 것이라고 생각하기 위해 정말로 멈추지 않았다면, 당신은 그 모든 점을 놓치고있는 것입니다. –

답변

3

"분산"그래서 나는 같은 출력을 생성하기 위해 찾고 있어요. 나는 당신이 그것을 간과 할 수 있기를 바랍니다. 우리는 디바이스 1의 기능에 속 값에 의해 결정 원래 dataframe의 섹션을 통과 분할 lapply 전략을 사용하여, 이제

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 
    } 

전체 dataframe에서 작동하는 데 사용하십시오 dataframe 객체에서 작업 할 수 있습니다

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

$B 
[1] 1.772467 
+0

감사합니다. 대단히 멋진 솔루션입니다. –

관련 문제