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

从R中的函数返回完整的data.frame,r,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.f

我想在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
>d
N1 N2
11A
2 B
3 C
>d.x=3
>d
N1 N2
11A
2 B
3 C
>d.x
[1] 3
>食物1 d1
N1 N2
11A
2 B
3 C
>d1.x
错误:找不到对象“d1.x”
我查看了
assign
,但是由于data.frame是在函数内部创建的,并且被返回,因此我认为它在这里不相关。 谢谢。

更改此选项:

d.x=3
为此:

d$x=3

您的评论建议您创建一个名为“d.3”的属性(将“元数据”附加到R中的对象的常用方法),并使用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

d这没有什么意义。值3到底应该如何添加到数据帧d的“顶部”?新的一排?属性?我知道你的意思,但它有效,这就是我需要的。唯一的问题是,当我从函数返回data.frame时,不会返回额外的数据。我只需要返回一个同时包含数据行和元数据的数据结构,您只需要简单介绍一下R.d.x是一个单独的对象,与x没有任何关系。如果你想在d中有一列名为x,那么你可以将其称为d$x。答案正确时,解释需要更改的人会很有帮助。这可能是OP的目的,但我们应该注意,它将创建一整列3,而不是一个值。