从R中的函数返回完整的data.frame

时间:2013-02-13 19:37:36

标签: r

我想在data.frame之上存储其他信息并从函数返回它。正如您所看到的 - 附加数据消失了。 例如:

> d<-data.frame(N1=c(1,2,3),N2=(LETTERS[1:3]))
> d
  N1 N2
1  1  A
2  2  B
3  3  C
> d.x = 3
> d
  N1 N2
1  1  A
2  2  B
3  3  C
> d.x
[1] 3
> foo1 <- function() {
+ d<-data.frame(N1=c(1,2,3),N2=(LETTERS[1:3]))
+ d.x=3
+ return(d)
+ }
> 
> d1<-foo1()
> d1
  N1 N2
1  1  A
2  2  B
3  3  C
> d1.x
Error: object 'd1.x' not found

我查看了assign,但由于data.frame是在函数内创建的并且被返回,我认为它与此处无关。 感谢。

2 个答案:

答案 0 :(得分:1)

您的评论建议您要创建一个属性(将“元数据”附加到R中的对象的常用方法)名为“d.3”,并使用foo1为数据框设置该属性:

d <- data.frame(N1=c(1,2,3),N2=(LETTERS[1:3]))
foo1 <- function(d, attrib) {
   attr(d, "d.x") <- attrib
  return(d)
  }
d <- foo1(d, 3)  # need to assign value to 'd' since function results are not "global"
d    # note that the default print method for dataframes does not show the attributes
#---------
  N1 N2
1  1  A
2  2  B
3  3  C
#-----
 attributes(d)
#-----

$names
[1] "N1" "N2"

$row.names
[1] 1 2 3

$class
[1] "data.frame"

$d.x
[1] 3

有关详细信息,请参阅?attr?attributes。还有comments函数。

答案 1 :(得分:0)

改变这个:

d.x=3

到此:

d$x=3