0

nchar("\\")=1, nchar("\abcde")=5etc が R にあるのはなぜですか? どの機能を使用しますnchar("\\")=2, nchar("\abcde")=6か?

4

3 に答える 3

6

Rでは、リテラル\が必要な場合は、他の人が言ったようにエスケープする必要があります。encodeString()あなたの例には理由がわかりません。私の回答の最初の行を使用nchar()して覚えておく方が簡単です:あなたのエスケープ\

> nchar("\\\\")
[1] 2
> nchar("\\abcde")
[1] 6

エスケープを忘れたい場合encodeString()は役立ちますが、どちらかを実行する (手動でエスケープする)escapeString()、両方ではなく を使用します。

> encodeString("\\")
[1] "\\\\"
> encodeString("\abcde")
[1] "\\abcde"

最後に、\uXXXXR で Unicode 文字を入力する方法であり、これは次のようになりencodeString()ます。

> nchar(encodeString("\u2642"))
[1] 1

これは、これを Unicode 文字の表現として扱いたいためです。この場合、「自分でエスケープする」ことは正しいことを行います。

> nchar("\\u2642")
[1] 6

R で文字列が a である場合、最初に unicdoe 文字に解釈されてから置換が行われる単純な方法はわかりません (ただし、その時点では\.を参照してください)。 R で使用されるエスケープ シーケンスのリスト。\\\uXXXX\?Quotes

于 2012-04-24T13:31:57.693 に答える
4

バックスラッシュは次の文字をエスケープしています。これは多くのプログラミング言語で一般的です。改行を意味する`\n'のように、文字列にコントロールやその他の非印刷文字を埋め込むことができます。

したがって、「\」は実際には単一の\文字です。懸念に対処する最も簡単な方法は、円記号を2倍にすることですnchar("\\abcde") = 6

于 2012-04-24T12:48:20.280 に答える
1

nchar(encodeString("\\"))

あなたが望むものをあなたに与えるべきです。

于 2012-04-24T12:56:28.810 に答える