2014-12-04 41 views
0

我有两个函数模仿我创建的函数。唯一的区别是最后一行。第一个返回一个向量,第二个返回一个数据帧;我想要一个数据框。我不明白这两者之间的区别。R函数使用的输出数据帧()

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'这是一个载体,而在第二个它是'within'线,它返回data.frame – akrun 2014-12-04 03:24:07

+0

好吧,我回去,并添加了最后一行这将在我上面的例子中是'd',它返回一个数据帧。我对功能很陌生,但这实际上清除了很多关于如何结束我的功能。 – 2014-12-04 03:32:50

+0

此外,你不需要'data.frame(cbind(..','只是data.frame(X,Y)'就足够了。这时候,你有混合班列事项。 – akrun 2014-12-04 03:34:13

回答

0

你的第一个函数返回一个向量的原因是,它返回d $ E,因为这是在函数的最后一行创建的对象。如果在函数结尾处添加return(d),则会得到您期望的数据框。明确的回报往往是一个好主意。