3

日付があります。

次に例を示します(によって生成されmydate <- lubridate::now()ます):

mydate <- structure(1361998255.23362, class = c("POSIXct", "POSIXt"), tzone = "")

これをベクトルに配置すると、問題ないように見えます。

(@joranのコメントに基づいて、元々は使用as.characterのみであった例を減らしましたc。現在は両方のケースを提供しています)

> c(mydate)
[1] "2013-02-27 14:50:55 CST"
> as.character(mydate)
[1] "2013-02-27 14:50:55"

ただし、文字である別の要素と組み合わせようとすると、日時の書式が削除されます。

> c('a', mydate)
[1] "a"                "1361998255.23362"
> as.character('a', mydate)
[1] "a"                "1361998255.23362"

どちらの場合も、出力はクラス「文字」です。

c入力ベクトルの内容に応じて異なる結果が得られるのはなぜですか?as.character(mydate)適切なソリューションを追加していますか?

> c('a', as.character(mydate))
[1] "a"                   "2013-02-27 14:50:55"

これの唯一の欠点は、5つの日付を持つベクトルを入力する場合、as.characterを5回記述する必要がないことです。

コンテキスト:上記は、再現可能な最小限の例です。コンテキストは、SQLステートメントを作成する目的で、ベクトルをコンマ区切りの文字列に変換する関数にベクトルを渡すことです。function(x) paste(paste("'", x, "'", sep=''), collapse=',')

4

2 に答える 2

6

どちらの場合も、出力のクラスは「文字」です。

これは正しくありません

> class(c(mydate))
[1] "POSIXct" "POSIXt" 
> dput(c(mydate))
structure(1361998255.23362, class = c("POSIXct", "POSIXt"))

c(mydate)まだPOSIXtオブジェクトです。印刷すると文字のように見えますが、文字ではありません。特殊な機能があるため、オブジェクトに対してcこの動作を行います。POSIXtc.POSIXct

2 番目のケースでは、最初の引数が文字であるため、デフォルトで の (内部) バージョンになりcます。これは 2 つのことを行います: 名前以外の属性を削除し、すべての要素を表すことができる型に昇格します ( のヘルプ ページを参照してくださいc)。ギブスの属性を剥ぎmydate取る

> as.vector(mydate)
[1] 1361998255

数字を文字に昇格すると、

> as.character(as.vector(mydate))
[1] "1361998255.23362"

この文字列が連結さ"a"れて、見た結果が得られます。

> c('a', mydate)
[1] "a"                "1361998255.23362"

as.character()適切なタイミングで強制を取得するための複数の呼び出しについては、すべての日付をc(を使用するc.POSIXct) とその呼び出しas.characterでラップすることができます。

> c('a', as.character(c(mydate, mydate)))
[1] "a"                   "2013-02-27 12:50:55" "2013-02-27 12:50:55"
于 2013-02-27T21:34:11.630 に答える
4

c() 関数は、「共通分母型」に強制します。数値ベクトルと文字ベクトルを連結すると、すべての文字値が得られます。論理ベクトルと数値ベクトルを組み合わせると、すべての数値が得られます。これらを別々のモードのままにしたい場合は、list()関数よりも関数を使用してくださいc()。完全な階層は次の場所にリストされています」

 ?c

「出力型は、階層 NULL < 生 < 論理 < 整数 < 実数 < 複合体 < 文字 < リスト < 式のコンポーネントの最上位の型から決定されます。」「整数」、「実数」、「複素数」はすべて「数値」モードであるため、これは実際には型について話していることに注意してください。ただし、すべてのタイプの完全なリストではありません。

?mode
?typeof

あなたのユースケースでは、これを使用しないのはなぜですか:

function(x) paste(paste("'", as.character(x), "'", sep=''), collapse=',')
于 2013-02-27T21:28:54.600 に答える