从函数中返回一个完整的数据帧R
问题描述:
我想在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并恢复我认为这不是与此有关。 谢谢。
答
您的意见建议你要创建一个名为属性(通常的方式附加 “元数据” 的对象在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
函数。
答
更改此:
d.x=3
这样:
d$x=3
+0
虽然答案是正确的,但解释需要更改的人是有帮助的。 – 2013-02-13 20:08:37
+0
这可能是OP之后的内容,但我们应该注意到它会创建3列的整列,而不是单个值。 – joran 2013-02-13 20:10:18
这没有什么意义。数据框3应该在数据框d的顶部添加值3?一个新的行?属性? – joran 2013-02-13 19:39:49
我知道你的意思,但它的作品,这是我需要的。唯一的问题是,当我从函数返回data.frame时,不会返回其他数据。我只需要返回一个包含数据行和元数据的数据结构。 – haki 2013-02-13 19:45:35
您需要对R进行最小限度的介绍。d.x是一个单独的对象,与x无关。如果你想在d中有一个名为x的列,那么你可以将它称为d $ x – lebatsnok 2014-01-04 17:43:51