2014-12-04 5 views
0

나는 만든 함수를 모방하는 두 가지 함수가 있습니다. 유일한 차이점은 마지막 줄입니다. 첫 번째는 벡터를 반환하고 두 번째는 데이터 프레임을 반환합니다. 데이터 프레임이 필요합니다. 나는 둘의 차이를 이해하지 못한다.R은 within() 함수를 사용하여 데이터 프레임을 출력합니다.

x<-rnorm(5) 
y<-rnorm(5) 

t<-function(x,y){ 
d<-data.frame(cbind(x,y)) 
d$e<-y*2 
} 

g<-t(x,y) 

> g 
[1] -1.3912452 1.0013463 -2.8913569 1.9724236 -0.3014467 

이는 벡터

u<-function(x,y){ 
    d<-data.frame(cbind(x,y)) 
    within(d,e<-y*2) 
} 


h<-u(x,y) 
> h 
      x   y   e 
1 0.80599999 -0.6956226 -1.3912452 
2 -0.04446587 0.5006731 1.0013463 
3 0.65049716 -1.4456785 -2.8913569 
4 -1.69269074 0.9862118 1.9724236 
5 1.70878627 -0.1507234 -0.3014467 

이 데이터 프레임을 반환에게 반환합니다.

첫 번째 줄은 함수가 아닌 한 줄씩 실행할 수 있으며 데이터 프레임을 반환하지만 함수 내에서 줄 바꿈하지는 않습니다. 통찰력을 가져 주셔서 감사합니다.

+0

첫 번째 함수에서 벡터 인'd $ e'를 반환하고 두 번째에는 data.frame을 반환하는'within' 행 – akrun

+0

ok, 나는 돌아가서 마지막 줄을 추가했습니다. 위의 예에서 'd'가되고 데이터 프레임이 반환되었습니다. 나는 기능에 익숙하지 않지만 실제로이 기능을 끝내는 방법에 대해서는 많은 부분을 정리했다. –

+0

또한'data.frame (cbind (..', 그냥'data.frame (x, y)'만으로도 충분하지 않습니다.) 클래스 열이 혼합되어있을 때 문제가됩니다 .. – akrun

답변

0

첫 번째 함수가 벡터를 반환하는 이유는 함수의 마지막 줄에 만들어진 개체이므로 d $ e를 반환한다는 것입니다. 함수 끝에 return (d)를 추가하면 예상했던 데이터 프레임을 얻을 수 있습니다. 명시 적으로 반환하는 것이 좋습니다.