2011-11-23 48 views
2

我试图使用structure()函数来创建R. 我看到这样的事情结构()中的“class”参数是什么?

structure(mydataframe, class="data.frame") 

没有类从哪儿来的数据帧?我看到有人在使用它,但它没有在R文档中列出。

这是不是程序员用另一种语言的经验和拿它了吗?它的工作原理。我很困扰。

编辑:我意识到dput(),是实际创建的数据帧寻找这样的。我明白了,欢呼!

+1

为什么你使用'structure'创建'data.frame'? –

+1

我强烈建议你不要以这种方式创建data.frame,除非你知道_exactly_你在做什么。您可能会创建一个不合格的data.frame,这会在代码中稍后导致难以发现的错误。 –

回答

6

你可能使用dput看见有人。 dput用于发布(通常很短)的数据。但通常你不会创建这样的数据框。您通常会使用data.frame函数创建它。见下面

> example_df <- data.frame(x=rnorm(3),y=rnorm(3)) 
> example_df 
      x   y 
1 0.2411880 0.6660809 
2 -0.5222567 -0.2512656 
3 0.3824853 -1.8420050 
> dput(example_df) 
structure(list(x = c(0.241188014013708, -0.522256746461544, 0.382485333260912 
), y = c(0.666080872170054, -0.251265630627216, -1.84200501106852 
)), .Names = c("x", "y"), row.names = c(NA, -3L), class = "data.frame") 

然后,如果有人想“复制”你data.frame,他只是要运行以下命令:

> copied_df <- structure(list(x = c(0.241188014013708, -0.522256746461544, 0.382485333260912 
+ ), y = c(0.666080872170054, -0.251265630627216, -1.84200501106852 
+ )), .Names = c("x", "y"), row.names = c(NA, -3L), class = "data.frame") 

我把引号的“复制”,因为注意以下几点:

> identical(example_df,copied_df) 
[1] FALSE 
> all.equal(example_df,copied_df) 
[1] TRUE 

identical产生错误,因为当您发布您的dput输出时,通常会将数字四舍五入为某个小数点。

+0

是的,我做了,很好猜! – user1061210

2

我抓我的头,想知道什么“R文档”就不用说了一些关于“下课”。这是该语言的一个非常基本的组成部分,以及函数如何应用。你应该输入该读:

?class 
?methods 
+0

我想对结构的帮助并没有把类作为参数列出... – Tommy

+0

它没有,(也没有讨论'data.frame'或'list'或'row.names'),但它链接到help(attr)提到'class'是一个典型的属性,并提供了一个到'class'函数的链接。不能期望帮助页面成为一本完整的书,批评在两次点击中提供所寻求的信息的帮助页是不公平的。 –

+0

谢谢你让我知道。但是,您必须单击右侧子链接,然后再次子链接,才能将class()实际存在。即使对专家来说,这可能是令人困惑和乏味的工作。 反正,我解决了问题,看我的编辑。 – user1061210

3

“阶级”不是一个具体的参数传递给structure功能 - 这就是为什么你没有在帮助文件中找到它。

structure接受一个对象,然后任意数量的名称/值对,并将它们设置为在物体上的属性。在这种情况下,class就是这样一个属性。你可以试试这虚构的“富”和“酒吧”属性添加到矢量:

x <- structure(1:3, foo=42, bar='hello') 
attributes(x) 
#$foo 
#[1] 42 
# 
#$bar 
#[1] "hello" 

正如约书亚乌尔里希和王旭提到的,你不应该创建一个data.frame这样。