2017-09-10 12 views
0

私は、全体の集合をランダムに2つの小さなものに分割しなければならない関数を書いています。セットのサイズは、ユーザーが決定します。 私はそれを2つの等しくないランダムな部分に分割する

number <- function(z,y,p){ 
indeks <-split(z$y,sample(rep(1:2), c(p, z$y-p))) 
train <- z[indeks,] 
test <- z [-indeks, ] 
result <- list(test, train) 
list(result) 
} 
number(z=lipiec , y=VII, p=200) 

をこの方法を行うにしようとしますが、次のエラーが、私は分割しようとしているファイルの構造はintで

Error in sample.int(length(x), size, replace, prob) : 
cannot take a sample larger than the population when 'replace = FALSE' 

をポップアップ表示されます。 574行あります。したがって、値200はサンプル全体よりも大きくはありません。 2つのランダムに分割されたセットを取得したいと思います。そのうちの1つ(テスト)は200個の要素を持ち、もう1つはベースセットの残りの部分になります。 誰かが私が間違っていることを知っていますか?

***** EDIT **** 修正した後、私は次のようにそれをやった:今、私は、私はそれらの一つ一つを割り当てるために、テストや電車に割り当てる必要があるかわからない

number <- function(z,y,p){ 
df <- as.data.frame(z$y) 
indeks <-split(df, sample(nrow(df))<=p) 
train <- indeks$ 
test <- indeks$ 
str(test)} 
number(z=lipiec , y=VII, p=200) 

コレクションの部分の誰でもアイデアはありますか?

+0

理由を変更するのですか? –

+0

ヒントをありがとう。私はまだ多くのヒントを待っています:) –

答えて

0
myfun <- function(df, N) { 
    split(df, sample(nrow(df))<=N) 
} 

set.seed(1) 
myfun(mtcars,10) 
2

あなたは試すことができます:

split(df,sample(c(rep(1,200),rep(2,574-200)))) 
関連する問題