【问题标题】:R output data frame from function using within()R使用within()从函数输出数据帧
【发布时间】:2014-12-04 03:19:58
【问题描述】:

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

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

这会返回一个数据框。

我可以逐行运行第一行,而不是作为函数,它返回一个数据框,但当我将它包装在函数中时则不行。感谢您提供任何见解。

【问题讨论】:

  • 在第一个函数中,您返回d$e,它是一个向量,而在第二个函数中,它是within 行,它返回data.frame
  • 好的,我返回并添加了最后一行,在上面的示例中为d,它返回了一个数据框。我是函数新手,但这实际上澄清了很多关于如何结束我的函数的问题。
  • 另外,您不需要data.frame(cbind(..,只需data.frame(x,y) 就足够了。当您有混合类列时,这很重要。
  • 请...不要重新定义 t()。这是一个非常有用的 R 函数。

标签: r function vector output


【解决方案1】:

第一个函数返回向量的原因是它返回了 d$e,因为这是在函数的最后一行创建的对象。如果您在函数末尾添加 return(d),您将获得您期望的数据框。显式返回通常是个好主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-18
    • 2020-09-02
    • 2016-10-20
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    相关资源
    最近更新 更多