web-dev-qa-db-ja.com

RでのreadLines()関数の扱い

最近、Rさんと非常に苦労しています。

私はエキスパートユーザーではありませんが、Rを使用してプレーンテキスト(_.txt_)ファイルを読み取り、その各行をキャプチャしようとしています。その後、それらの行を処理して、テキストにいくつかの中断と変更を加えたいと思います。

これが私が使っているコードです:

_fileName <- "C:/MyFolder/TEXT_TO_BE_PROCESSED.txt"
con <- file(fileName,open="r")
line <- readLines(con)
close(con)
_

テキストを読み、行は完全に分割されます。しかし、私は作成されたオブジェクトlineがどのように機能するか理解していません。

このコードで作成されたオブジェクトlineには、クラスcharacterと長さ_[57]_があります。 _line[1]_と入力すると、最初の行のテキストがそのまま表示されます。しかし、私がタイプした場合

_length(line[1])
_

_[1]_を返します。

518を実際に含む_length == 1_のこの文字列を_length == 518_の文字列に変換する方法を知りたいです。

誰かが私が間違っていることを知っていますか?

必ずしもreadLines()関数を使用する必要はありません。調べてみたところ、関数scan()も見つかりましたが、518文字の不変文字列と同じ状況でしたが、_length == 1_で終わりました。

私は私の疑いについて十分に明確になったと思います。英語が下手でごめんなさい。

8
user3521631

txtreadLinesで読み取ったデータの1行目のテキストであるとします。
次に、それぞれをWordである別々の文字列に分割する場合は、各単語間のスペースで分割するstrsplitを使用できます。

> txt <- paste0(letters[1:10], LETTERS[1:10], collapse = " ")
> txt
## [1] "aA bB cC dD eE fF gG hH iI jJ"   ## character vector of length 1
> length(txt)
[1] 1
> newTxt <- unlist(strsplit(txt, split = "\\s"))  ## split the string at the spaces
> newTxt
## [1] "aA" "bB" "cC" "dD" "eE" "fF" "gG" "hH" "iI" "jJ"
## now the text is a character vector of length 10  
> length(newTxt)
[1] 10
5
Rich Scriven

最初にそのコードを1行に圧縮できます。他の3行は、不要なオブジェクトを作成するだけです。

line <- readLines("C:/MyFolder/TEXT_TO_BE_PROCESSED.txt")

行ごとにスペースで区切られた単語の数を知りたい場合

words <- sapply(line,function(x) length(unlist(strsplit(x,split=" "))))

上記のlength引数を省略すると、各行から単語の文字ベクトルのリストが得られます。

5
JeremyS

どうですか:

con <- file(fileName, open='r')
text <- readLines(con)[[1]]

ファイルの最初の行のテキストを取得します。

1
Thys Potgieter