有沒有辦法區分1
和c(1)
?顯然R中如何區分R中元素和長度爲1的向量?
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中如何區分R中元素和長度爲1的向量?
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]"
任何想法?
它的工作原理,如果你傳遞一個列表預期:
> toJSON(list(1))
[1] "[1]"
您可以as.list
轉換:
> toJSON(as.list(c(1)))
[1] "[1]"
> toJSON(as.list(c(1, 2)))
[1] "[1,2]"
正如在其他的答案中提到,有一個原子值和一個長度R中的向量之間沒有區別 - 不像列表,它總是有一個長度和可以包含任意對象,不一定是相同的類型。
號據我所知,有1
和c(1)
> identical(1, c(1))
[1] TRUE
rjson::toJSON
返回c(1)
比它的c(1,2)
不同的值的原因是沒有什麼區別,因爲它會檢查的長度並返回不同的長度1對象
在R數字只是一個條目的向量。沒有區別。
事實上,一個元素的載體,將自動打印,如果它只是一個標量:
a<- 1
str(a) # num 1
b<-c(1)
str(b) # num 1
如果您的輸出應該對其進行編碼不同,那麼你將不得不這樣做手工,你可以做因爲你的程序正在生成兩者,它知道哪些是「真實」的矢量與具有1個元素的矢量,但是在概念上標量是。
這是與'RJSONIO'包?我爲'toJSON(1)'和'toJSON(c(1))'獲得了「[1]」 – GSee
這是'rjson'包。在我看來,'toJSON(1)'應該是''1「' – nachocab
'rjson :: toJSON'會檢查長度。即它不會區分'c(1)'和'1' – GSee