25

SPSSでRプラグインを実行しているときに、入力としてWindowsパス文字列を受け取ります。

'C:\Users\mhermans\somefile.csv'

後続のRコードでそのパスを使用したいのですが、スラッシュをスラッシュに置き換える必要があります。そうしないと、Rはそれをエスケープとして解釈します(たとえば、「\ Uは16進数なしで使用されます」エラー)。

ただし、円記号を円記号に置き換えたり、二重にエスケープしたりできる関数を見つけることができませんでした。これらの関数はすべて、これらの文字がエスケープされていることを前提としています。

それで、次の線に沿って何かがありますか?

>gsub('\\', '/', 'C:\Users\mhermans')
C:/Users/mhermans
4

4 に答える 4

16

scan() で「allowEscapes」引数の使用を試みることができます

X=scan(what="character",allowEscapes=F)
C:\Users\mhermans\somefile.csv

print(X)
[1] "C:\\Users\\mhermans\\somefile.csv"
于 2011-01-13T22:11:14.027 に答える
5

まず、名前を割り当てる必要があります。

pathname <- 'C:\\Users\\mhermans\\somefile.csv'

それを名前ベクトルにするには、それらすべてを 2 倍にする必要があることに注意してください。これにより、正規表現の使用方法についてのヒントが得られます。実際、テキスト ファイルから読み込むと、R がすべての倍加を行います。バックスラッシュを実際に2倍にするわけではないことに注意してください。単一のバックスラッシュとして保存されていますが、そのように表示されており、コンソールからそのように入力する必要があります。それ以外の場合、R インタープリターはそれを特殊文字に変換しようとします (多くの場合失敗します)。さらに問題を複雑にするのは、正規表現がバックスラッシュをエスケープとしても使用することです。したがって、grep、sub、または gsub でエスケープを検出するには、バックスラッシュを 4 倍にする必要があります

 gsub("\\\\", "/", pathname)
# [1] "C:/Users/mhermans/somefile.csv"

バックスラッシュを二重に「二重」にする必要がありました。\ の各カップルの最初の部分は、grep マシンに次に来るものがリテラルであることを知らせることです。

検討:

 nchar("\\A")
#  returns `[1] 2`
于 2011-01-13T22:54:22.940 に答える
1

ファイルE:\ Data \ junk.txtに次のテキスト(引用符なし)が含まれている場合:C:\ Users \ mhermans \ somefile.csv

次のステートメントで警告が表示される場合がありますが、機能します。

 texinp <- readLines("E:\\Data\\junk.txt")

ファイルE:\ Data \ junk.txtに次のテキスト(引用符付き)が含まれている場合: "C:\ Users \ mhermans \ somefile.csv"

上記のreadlinesステートメントでも警告が表示される場合がありますが、次のようになります。

"\" C:\ Users \ mhermans \ somefile.csv \ ""

したがって、必要なものを取得するには、受信ファイルに引用符が含まれていないことを確認し、次を使用します。

 texinp <- suppressWarnings(readLines("E:\\Data\\junk.txt"))
于 2011-01-14T01:06:12.793 に答える