结构()中的“class”参数是什么?

时间:2011-11-23 19:35:22

标签: r

我正在尝试使用structure()函数在R中创建数据框。 我看到了类似的东西

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

班级来自哪里?我看到有人使用它,但它没有在R文档中列出。

这是程序员用另一种语言学习并将其结束的东西吗?它有效。我很困惑。

编辑:我实现了dput(),实际创建的数据框是这样的。我弄明白了,欢呼!

3 个答案:

答案 0 :(得分:7)

您可能看到有人使用dputdput用于发布(通常是短期)数据。但通常你不会创建这样的数据框。您通常会使用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输出时,数字通常会舍入到某个小数点。

答案 1 :(得分:4)

'class'不是structure函数的特定参数 - 这就是为什么你没有在帮助文件中找到它。

structure获取一个对象,然后获取任意数量的名称/值对,并将它们设置为对象上的属性。在这种情况下,class就是这样一个属性。您可以尝试将虚构的'foo'和'bar'属性添加到矢量中:

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

正如Joshua Ulrich和Xu Wang所提到的那样,你不应该像这样创建一个data.frame

答案 2 :(得分:2)

我在挠头,想知道什么是“R文件”不会对“课堂”说些什么。它是该语言的一个非常基本的组成部分,以及如何应用函数。你应该输入这个并阅读:

?class
?methods