2013-02-13 78 views
-1

我想在data.frame的顶部存储附加信息并从函数返回它。正如你所看到的 - 额外的数据消失。 例如:从函数中返回一个完整的数据帧R

> 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并恢复我认为这不是与此有关。 谢谢。

+0

这没有什么意义。数据框3应该在数据框d的顶部添加值3?一个新的行?属性? – joran 2013-02-13 19:39:49

+0

我知道你的意思,但它的作品,这是我需要的。唯一的问题是,当我从函数返回data.frame时,不会返回其他数据。我只需要返回一个包含数据行和元数据的数据结构。 – haki 2013-02-13 19:45:35

+0

您需要对R进行最小限度的介绍。d.x是一个单独的对象,与x无关。如果你想在d中有一个名为x的列,那么你可以将它称为d $ x – lebatsnok 2014-01-04 17:43:51

回答

1

您的意见建议你要创建一个名为属性(通常的方式附加 “元数据” 的对象在R)“d 0.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函数。

0

更改此:

d.x=3 

这样:

d$x=3 
+0

虽然答案是正确的,但解释需要更改的人是有帮助的。 – 2013-02-13 20:08:37

+0

这可能是OP之后的内容,但我们应该注意到它会创建3列的整列,而不是单个值。 – joran 2013-02-13 20:10:18

相关问题