8

と を区別する方法は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]"

何か案は?

4

3 に答える 3

6

リストを渡すと、期待どおりに機能します。

> 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のベクトルの間に区別はありません-常に長さを持ち、必ずしも同じタイプではない任意のオブジェクトを含むことができるリストとは異なります。

于 2013-07-02T13:20:51.690 に答える
1

R では、数値は 1 つのエントリの単なるベクトルです。区別はありません。

実際、1 要素のベクトルは、単なるスカラーであるかのように自動的に出力されます。

a<- 1
str(a)          # num 1
b<-c(1)
str(b)          # num 1

出力がそれらを異なる方法でエンコードする必要がある場合は、手動で行う必要があります。これは、プログラムが両方を生成しているため可能です。「実際の」ベクトルと 1 つの要素を持つが概念的にはスカラーであるベクトルを認識します。

于 2013-07-02T13:21:05.513 に答える