0

「training_data」というリストがあります。「training_data」リストには、次の関数を使用して複数のファイルから読み取ったデータが含まれています。

training_data <- lapply(files, read.table, header=TRUE, sep=",")

次のコマンドを使用して、任意のデータセットの最初のフィールドにアクセスできます。

training_data[[1]][1]           # The first field contains the class "pos OR neg"

サポート ベクター マシン (e1071) を使用したバイナリ分類には、これらのデータセット (training_data に含まれる) を使用する必要があります。しかし、問題は、特定のデータ セットには 1 つのクラスのデータのみが含まれていることです。つまり、すべて pos またはすべて neg のいずれかです。これは svm 関数では受け入れられず、それらのデータセットを除外したいと考えています。次のコードを試しましたが、クラス列にアクセスできません。

training_data<-lapply(training_data, 
                function(data)
                 {
                    if(["the class field is always positive"])
                       ### exclude this dataset from training_data

                 })

更新:関数に渡されたデータの最初の列に正確にアクセスするにはどうすればよいですか? また、クラス列に1つのクラスのみで構成されるtraining_dataからこれらのデータセットを除外するにはどうすればよいですか?

ありがとう

4

2 に答える 2

2

これは、Filter関数が作成されたものです。レプリケーション コードが提供されていないため、使用方法の簡単な例を次に示しますFilter。ベクトルの大きなリストがあり、それぞれの長さが 2 要素であるとします。

mylist <- lapply(1:1000, function(i) c(runif(1), runif(1)))

最初の要素が 0.5 より大きいリスト内のベクトルのみを保持する場合は、次のようにします。

filtered_list <- Filter(function (x) x[1] > 0.5, mylist)

ここで、の各要素mylistが adata.frameであり、それぞれの最初の列がdata.frameモデルの応答ベクトルである場合、データの場合のように、ジャスティンが言及した表記法を使用して、正または負のみを持つdata[,1]すべてのものを除外できますdata.frames最初の列の値:

filtered_list <- Filter(function (x) { !(all(x[,1] < 0) || all(x[,1] > 0))}, 
                        mylist)
于 2013-01-28T23:28:47.993 に答える
1

前と同じように最初の要素にアクセスします。オブジェクトdataは関数内で使用できるようになり、リストに読み込んだ各データ セットと同じ構造になります。したがって、data[1]またはより明示的data[,1]にそれらにアクセスします。

R に関する多くの優れたガイド (特にcran.r-project.orgにリストされているもの) のいずれかを参照して、関数がどのように機能しているか、およびデータをスライスする方法をよりよく理解することをお勧めします。

私があなたの質問に答えていない場合は、お気軽に別の人に質問するか、この質問を編集して、見つけた問題を再現するサンプル データを含めてください。現時点では、この質問はクローズされる可能性があります。

于 2013-01-28T22:21:14.677 に答える