18

からhelp("'"):

一重引用符と二重引用符は、文字定数を区切ります。それらは同じ意味で使用できますが、二重引用符が優先されます (文字定数は二重引用符を使用して出力されます)。したがって、単一引用符は通常、二重引用符を含む文字定数を区切るためにのみ使用されます。

それらが交換可能である場合、なぜ二重引用符が好まれるのですか? 私自身の使用法では、それらの違いをまだ見つけていません。特に驚くべきことは、混合文字ベクトルが許容されることです。

> c("a",'b',"c")
[1] "a" "b" "c"

編集

ここで私は本当に2つの質問をしているのだと思います:

  1. '"が異なる動作をする状況はありますか?
  2. そうでない場合、"慣例により優先バージョンとして選ばれたのはなぜですか?

これまでの回答は (2) に関連していましたが、(1) は少なくとも同じくらい興味深いものです。

4

4 に答える 4

12

一重引用符が二重引用符と異なる場合は知りません。好みは読みやすさによるものであり、一重引用符とバックティックが異なる方法で処理される可能性を避けるためだと思います。ウェットウェアの眼と脳のシステムが、一重引用符とペアになった不一致のバックティックを検出するのはおそらく非常に困難です。

> `newfn` <- function() {}
> newfn
function() {}
> "newfn" <- function() {}
> newfn
function() {}
> 'newfn' <- function() {}
> newfn
function() {}
> var <- c(`a`, "b", 'c')
Error: object 'a' not found
> var <- c( "b", 'c')
> var
[1] "b" "c"
> a <- 1
> identical(`a`, a)
[1] TRUE

したがって、名前への割り当ての場合、それら (s-quotes、d-quotes、および back-ticks) は、割り当て from の左側ではすべて同じように処理されますfunctionが、引用符なしaと back-tickedaはコマンド ラインでは同じであり、引用符で囲まれた「a」または「a」のいずれとも異なります。

違いがある可能性がある他の状況は、データ入力にあります。人の名前には単一引用符が含まれる場合がありますが、関数による 2 つの異なる種類の引用符の処理を確認したい場合はそうではありませんread.tablequote="\""デフォルトでは、両方のタイプの引用符が使用されますが、誤って単一のテキスト フィールドに大きなデータの塊が変換されないように、設定によって単一引用符の引用アクションを「オフ」にする必要がある場合があります。このcount.fields関数は read.table と同じデフォルトを持っているので、一重引用符の不一致による短縮された行をチェックするために、これを予備実行することは理にかなっています:

 table( count.fields('filnam.ext') )
于 2012-11-30T02:44:45.453 に答える
7

私の推測では、「一重引用符」はアポストロフィとしてより頻繁に使用されるため、二重引用符を優先すると、アポストロフィで混乱する可能性が低くなります。

于 2012-11-30T02:26:19.380 に答える
3

最初の質問である ' と ' の動作が異なる状況はありますか?に関しては、次の点に注意することが重要だと思います。

identical("a", 'a')
TRUE

R ユーザー (パッケージ開発者を含む) には違いを伝える方法がないため、どちらか一方に対して異なる動作を作成する方法がありません。

于 2012-11-30T12:14:34.783 に答える
2

単一引用符と二重引用符の意味に違いがある C ファミリー言語 (C、C++、Java) でのプログラミングに慣れている方の混乱を避けるため。AC プログラマーは、「a」を 1 文字として読み取り、「a」を文字「a」の後にヌル文字が続き、文字列を終了する文字列として読み取ります。R には文字データ型はなく、文字列のみがあります。他の言語との一貫性のために、文字列を二重引用符で区切ると役立ちます。R の単一引用符バージョンは便宜上のものです。ほとんどのキーボードでは、一重引用符を入力するためにシフト キーを使用する必要はありませんが、二重引用符を入力するにはシフト キーが必要です。

于 2012-11-30T05:18:49.940 に答える