3

3 つのサイト コホートのいずれかに含まれるサイトでのサンプリング イベントのシミュレーションを実行および管理するためのコードを作成しています。以下のコードを使用rep()して、コホート識別子 (1、2、または 3) を割り当てます。

cohort <- rep(1:n.cohorts, n.sites) 

私の問題を再現するには、次の行を実行する必要がありますが、重要な行を最初に置きましたrep()

n.cohorts <- 3
s <- 10 # total available sites in this example

# different proportions of the total can be allocated to each cohort, for example 
prop.control <- 0.4 ; prop.int <- 0.4 ; prop.ref <- 1-(prop.int+prop.control)
n.control <- prop.control * s; n.int <- prop.int * s; n.ref <- prop.ref * s 
n.sites <- c(n.control, n.int, n.ref)  

今、n.sitesそれ自体が戻ります

[1] 4 4 2

したがって、呼び出しを再度実行すると、次のように 10 個の項目のリストになるcohort <- rep(1:n.cohorts, n.sites)と予想されます。しかし、私が得るのは9つだけです:cohort[1] 1 1 1 1 2 2 2 2 3 3

> cohort
[1] 1 1 1 1 2 2 2 2 3    

n.sitesが so: のように直接定義されている同じコードを実行すると、n.sites <- c(4, 4, 2)期待する 10 個のアイテムが得られます。これを何度かやり直して、両方のシナリオn.sitesで同じ結果が得られることを確信しました。

なぜこれが起こるのか誰か説明できますか?よろしくお願いします。

デビッド

4

1 に答える 1

2

これは、R の算術的不正確性の問題の 1 つだと思います。問題は次のとおりです。

prop.ref <- 1-prop.int-prop.control
prop.ref*10
#[1] 2
floor(prop.ref*10)
#[1] 1

prop.int+prop.controlしたがって、r は0.8 よりわずかに大きいと考えます。

あなたはそれを修正することができます

cohort <- rep(1:n.cohorts, ceiling(n.sites)) 

しかし、あなたは正しいです、それは深刻なバグのようです編集-申し訳ありません深刻なように見えます

于 2014-01-28T07:07:06.740 に答える