0

R でいくつかの SVM モデルを管理するのに助けが必要です。約 100 個のデータ ファイルがあり、各ファイルを読み取り、その後 e1071 パッケージを使用してそのファイルのモデルをトレーニングしたいと考えています。すべてのファイルの名前が 1 つのファイルに含まれているため、各ファイルを簡単に追跡できます。次のコードを使用しましたが、解決策に到達できませんでした。

x<-read.table("data.dat", header=F)
x=as.vector(t(x))
vectory <- vector(mode="list", length=length(x))
vectorz <- vector(mode="list", length=length(x))

for (i in 1:length(x))
{
x[i] <- substr(x[i], 3, 100)
#assign(gsub("-", "_", x[i]), read.table(x[i], header=T, #sep=","))
val <- gsub("-", "_", x[i])
vectory[[val]] <- read.table(x[i], header=T, sep=",")
data(vectory[[val]])
valmodel <- x[i]
paste(valmodel, "_model", sep="")
vectorz[[valmodel]] <- ksvm(label ~ ., data=vectory[[val]])
}

ksvm 関数の呼び出し中に、データ関数呼び出しとデータ パラメータに対して正確に何をする必要があるのか​​ について混乱しています。

よろしく

4

1 に答える 1

0

スコットが述べたように、あなたの例は再現可能ではありません(そして、質問はあなたの問題が何であるかを明確にしません)。混乱が少なくなるようにコードを書き直しました。未検証ですので、微調整が必​​要かもしれません。

file_names <- read.table("data.dat")[[1]]
file_names <- substring(file_names, 3)
file_names <- gsub("-", "_", file_names)
training_data <- lapply(
  file_names,
  read.table,
  header = TRUE,
  sep    = ", "
)
svm_models <- lapply(
  training_data,
  function(data)
  {
    ksvm(label ~ ., data = data)
  }
)

一般原理:

変数に意味のある名前を付けます。file_namesではなく、ファイル名を呼び出しますx

リスト (またはベクトル) をループする場合は、ループを使用するのではなくlapply(またはllplyfrom ) を使用します。これには、追加のボイラープレート コードとダミー変数の作成が含まれるためです。またはもう必要ないことに注意してください。plyrforvectoryvectorz

モデルを実行するコードからデータを読み込むコードを分離します。これらは異なるタスクであり、コードをごちゃ混ぜにすると、思考が混乱します。(また、1 つのモデルが失敗したときに、データを再度読み込む必要はありません。)

于 2013-01-25T08:47:24.933 に答える