有没有办法区分1
和c(1)
?显然在R中
c(1) == 1 # TRUE
as.matrix(c(1)) == 1 # TRUE
as.array(c(1)) == 1 # TRUE
比如说,如果我要将一个向量转换为JSON格式,这就成了一个问题:
library(rjson)
toJSON(c(1,2)) # "[1,2]"
toJSON(c(1)) # "1" instead of "[1]"
任何想法吗?
有没有办法区分1
和c(1)
?显然在R中
c(1) == 1 # TRUE
as.matrix(c(1)) == 1 # TRUE
as.array(c(1)) == 1 # TRUE
比如说,如果我要将一个向量转换为JSON格式,这就成了一个问题:
library(rjson)
toJSON(c(1,2)) # "[1,2]"
toJSON(c(1)) # "1" instead of "[1]"
1
和c(1)
之间没有区别。> identical(1, c(1))
[1] TRUE
< p > rjson::toJSON
返回c(1)
和c(1,2)
不同的值是因为它检查长度并针对长度为1的对象返回不同的值。
如果你传递一个列表,它会按预期工作:
> toJSON(list(1))
[1] "[1]"
as.list
来转换:> toJSON(as.list(c(1)))
[1] "[1]"
> toJSON(as.list(c(1, 2)))
[1] "[1,2]"
正如其他答案中所指出的那样,在R语言中,原子值和长度为一的向量之间没有区别,这与列表不同,列表始终具有长度并可以包含任意对象,不一定是相同类型。
a<- 1
str(a) # num 1
b<-c(1)
str(b) # num 1
RJSONIO
包吗?我对toJSON(1)
和toJSON(c(1))
都得到了 "[ 1 ]"。 - GSeerjson
包。在我看来,toJSON(1)
应该是"1"
。 - nachocabrjson::toJSON
检查长度。即它不区分c(1)
和1
。 - GSeec(1)
和1
是完全相同的,因此您无法区分它们。 - kohske