【发布时间】:2015-09-04 13:52:26
【问题描述】:
我下面的测试不起作用。任何人都可以提出不同的方法吗?
===不同的内容,相同的结构,想要“true”进行比较
> x<-c(1,2,3)
> y<-x
> identical(str(x),str(y))
num [1:3] 1 2 3
num [1:3] 1 2 3
[1] TRUE
> y[3]<-999
> identical(str(x),str(y))
num [1:3] 1 2 3
num [1:3] 1 2 999
[1] TRUE
> str(x)
num [1:3] 1 2 3
> str(y)
num [1:3] 1 2 999
>
但这种方法是错误的,因为它说 x 和 z 具有相同的结构!
> z<-list("a","b")
> identical(str(x),str(z))
num [1:3] 1 2 3
List of 2
$ : chr "a"
$ : chr "b"
[1] TRUE
我正在尝试这个,因为我需要一种方法来确认我构造的 R 对象与 R 包示例中提供的类型完全相同。
【问题讨论】:
-
str返回NULL(你看到的只是打印出来的,没有返回),所以你总是在比较两个相同的空值。只需使用identical(x,y) -
您正在比较来自 str 的对象而不是元素本身...
-
问题措辞不是最清楚的,但我读到它是在询问如何测试两个对象是否具有相同的结构,即使它们的内容可能不同,这是一个相当困难的问题。
-
> x y 相同(x, y) [1] 真 > y[3] 相同(x, y) [1] 假
-
@A.韦伯 我知道我已经晚了四年,但请看我的回答stackoverflow.com/a/59340383/8436923
标签: r object compare structure