0

ハッカー向けの機械学習 ( https://github.com/johnmyleswhite/ML_for_Hackers ) のチュートリアルに従っており、Sublime Text をテキスト エディターとして使用しています。コードを実行するには、SublimeREPL R を使用します。

私は本から直接取ったこのコードを使用しています:

setwd("/path/to/folder")
# Load the text mining package
library(tm)
library(ggplot2)

# Loading all necessary paths
spam.path <- "data/spam/"
spam2.path <- "data/spam_2/"
easyham.path <- "data/easy_ham/"
easyham.path2 <- "data/easy_ham_2/"
hardham.path <- "data/hard_ham/"
hardham2.path <- "data/hard_ham_2/"

# Get the content of each email
get.msg <- function(path) {
    con     <- file(path, open = "rt", encoding = "latin1")
    text    <- readLines(con)
    msg     <- text[seq(which(text == "")[1] + 1, length(text),1)]
    close(con)

    return(paste(msg, collapse = "\n"))
}

# Create a vector where each element is an email
spam.docs   <- dir(spam.path)
spam.docs   <- spam.docs[which(spam.docs != "cmds")]
all.spam    <- sapply(spam.docs, function(p) get.msg(paste(spam.path, p, sep = "")))

# Log the spam
head(all.spam)

このコードは RStudio で正常に動作します (ここで提供されるデータ: https://github.com/johnmyleswhite/ML_for_Hackers/tree/master/03-Classification ) が、Sublime で実行すると、次のエラー メッセージが表示されます。

> all.spam <- sapply(spam.docs,
+                    function(p) get.msg(file.path(spam.path, p)))
Error in seq.default(which(text == "")[1] + 1, length(text), 1) : 
  'from' cannot be NA, NaN or infinite
In addition: Warning messages:
1: In readLines(con) :
  invalid input found on input connection 'data/spam/00006.5ab5620d3d7c6c0db76234556a16f6c1'
2: In readLines(con) :
  invalid input found on input connection 'data/spam/00009.027bf6e0b0c4ab34db3ce0ea4bf2edab'
3: In readLines(con) :
  invalid input found on input connection 'data/spam/00031.a78bb452b3a7376202b5e62a81530449'
4: In readLines(con) :
  incomplete final line found on 'data/spam/00031.a78bb452b3a7376202b5e62a81530449'
5: In readLines(con) :
  invalid input found on input connection 'data/spam/00035.7ce3307b56dd90453027a6630179282e'
6: In readLines(con) :
  incomplete final line found on 'data/spam/00035.7ce3307b56dd90453027a6630179282e'
> 

John Myles White のリポジトリからコードを取得しても、同じ結果が得られます。

どうすればこれを修正できますか?

ありがとう

4

1 に答える 1

0

問題はencoding=latin1の使用にあると思います。これを削除するだけで済みます。私の環境でテストしましたが、うまく動作しました。

spam.docs <- paste(spam.path,spam.docs,sep="")

all.spam <- sapply(spam.docs,get.msg) 警告メッセージ: in readLines(con) : 「XXXXXXXXXXXXXXXXXX/ML_for_Hackers-master/03-Classification/data/spam/00136.faa39d8e816c70f23b4bb8758d8a74f0」で見つかった不完全な最終行

まだいくつかの警告がありますが、結果は良好です。

ありがとう。

于 2015-03-20T07:23:02.413 に答える