9

Rで作成している文字列のベクトルに誤った \n 文字が表示される理由を誰かが理解するのを手伝ってくれることを願っています.

固定幅形式の非常に幅の広いデータ ファイルをインポートしてクリーンアップしようとしています ( http://www.state.nj.us/education/schools/achievement/2012/njask6/、「データ実行用のテキスト ファイル」)。read.fwf の使用に関するUCLA チュートリアルこの優れた SO の質問に従って、インポート後に列名を付けました。

ファイルの幅が非常に広いため、列ヘッダーは長く、すべて合わせて 29,800 文字弱です。私は文字列の単純なベクトルとしてそれらを渡しています:

column_names <- c(...)

ここで醜いダンプを惜しみませんが、すべてをpastebinに落としました。

サブセットの一部が 0 行を返していることに気付いたとき、分析のためにいくつかの変数をクリーンアップして変換していました。困惑した後 (スペルを間違えたのでしょうか?)、どういうわけか '\n' 改行文字が列ヘッダーに導入されていることに気付きました。

作成した column_names ベクトルをループすると

for (i in 1:length(column_names)) {
  print(column_names[i])
}

81 行目の途中に最初の改行文字が表示されます -

SPECIAL\n教育科学科学登録番号

私がこれを解決しようとした道:

1)それは私の環境に関するものですか?R で通常のスクリプト エディターを使用していますが、行折り返されますが、画面上の改行が \n 文字の配置と一致しません。これは、R スクリプト エディターではないことを示唆しています。

2) GUI 設定はありますか? いくつかの検索を行いましたが、何も見つかりませんでした。

3) パターンはありますか? 約4000文字ごとに改行文字が挿入されるようです。R/S プリミティブを読んで、これが基本的な R データ構造と関係があるかどうかを判断しようとしましたが、すぐに頭に浮かびました。

長い文字列を短いチャンクに分割してから、それらを結合してみましたが、問題は解決したようです。

column_names.1 <- c(...)
column_names.2 <- c(...)
column_names_combined <- c(column_names.1, column_names.2)

すぐに回避策がありますが、ここで実際に何が起こっているのか知りたいです。

文字ベクトルの問題に関するいくつかの投稿では、メモリ プロファイルを実行するよう提案されました。

  memory.profile()
        NULL      symbol    pairlist     closure environment     promise 
           1        9572      220717        4734        1379        5764 
    language     special     builtin        char     logical     integer 
       63932         165        1550       18935       10302       30428 
      double     complex   character         ...         any        list 
        2039           1       60058           0           0       20059 
  expression    bytecode externalptr     weakref         raw          S4 
           1       16553         725         150         151        1162 

Windows 7 (エンタープライズ、SP 1、8 ギガ RAM) で R 2.15.1 (64 ビット) R を実行しています。ありがとう!

4

1 に答える 1

12

これはバグだと思います。代わりに、コンソールの既知の制限に直面しているようです。An Introduction to R のセクション 1.8 - R コマンド、大文字と小文字の区別などで説明されているように:

コンソールで入力するコマンド ラインは、[3] 約 4095 バイト (文字ではない) に制限されています。

[3] コンソールの中にはそれ以上の入力を許可しないものもあれば、それ以上入力できないものもあれば、余分なものを黙って破棄するものもあれば、それを次の行の開始として使用するものもあります。

コマンドをファイルに入れるかsource、適切なポイント (コンマの間) に独自の改行を挿入して、コードを複数の行に分割します。例えば:

column_names <-
  c("County Code/DFG/Aggregation Code", "District Code", "School Code",
    "County Name", "District Name", "School Name", "DFG", "Special Needs",
    "TOTAL POPULATION TOTAL POPULATION Number Enrolled LAL", ...)
于 2012-10-25T03:10:51.267 に答える