さらなる更新whileループについての質問R
データが作成されるため、入力はありません。
以下のコードは、最初の2人の患者のために動作しますが、私はループに入れたいです。最終的に200人の患者が存在する。長さは申し訳ありません。これまでのあなたの助けのために、追加情報を おかげで、ヨシュアを更新し
s <- 42 #SHOULD BE 42
p <- 30 #SHOULD BE 400
p1 <- 8 #Should be 8
m <- 2 #shou;ld be higher
w <- 2
#CAPITAL LETTERS are counting versions of the lowercase
numses <- 12
mult <- 1
maxses <- round(mult*numses,0)
drop = .3; titrate = .2; complete = .3; noise = .5; other = .1
dropskip = .3; titrateskip = .2; completeskip = .3; noiseskip = .5; otherskip = .1;
dropnew = .3; titratenew = .2; completenew = .9; noisenew = .5; othernew = .1;
name = "Basic";
pdrop = .1; ptitrate = .2; pcomplete =.7; pnoise = .9; pother = 1;
# THESE HAVE TO BE ASCENDING.
w = 10
######################################################################################################################
patients <- matrix(nrow = p, ncol = s, "NA") #all patients attendance
invited <- matrix(nrow = p, ncol = s, 0) #number of sessions A or S
missinrow <- matrix(nrow = p, ncol = s, 0) #number of sessions missed in a row
insess <- vector("numeric", s) #number of people in a session
set.seed(83877201)
addlist <- rpois(s, w)
# Set up waitlist
waitlist <- vector("numeric", s)
waitlist[1] <- addlist[1]
for(i in 2:s)
{
waitlist[i] <- waitlist[i-1] + addlist[i]
}
for (i in 1:p)
{
for (j in 1:s)
{
if (i < waitlist[j]) patients[i,j] <- "W"
}
}
#Assign all patients to classes
classlist <- cut(runif(p), c(0, pdrop, ptitrate, pnoise, pcomplete, 1), labels = c("D", "T", "C", "N", "O"))
#First patient
#first session
{
invited[1,1] <- 1
insess[1] <- 1
if (classlist[1] == "D")
{
if (runif(1) < dropnew) {patients[1, 1] <- 'A'} else
{
patients[1, 1] <- 'S'
missinrow[1, 1] <- 1
}
}
if (classlist[1] == "T")
{
if (runif(1) < titratenew) {patients[1, 1] <- 'A'} else
{
patients[1, 1] <- 'S'
missinrow[1, 1] <- 1
}
}
if (classlist[1] == "C")
{
if (runif(1) < completenew) {patients[1, 1] <- 'A'} else
{
patients[1, 1] <- 'S'
missinrow[1, 1] <- 1
}
}
if (classlist[1] == "N")
{
if (runif(1) < noisenew) {patients[1, 1] <- 'A'} else
{
patients[1, 1] <- 'S'
missinrow[1, 1] <- 1
}
}
if (classlist[1] == "O")
{
if (runif(1) < othernew) {patients[1, 1] <- 'A'} else
{
patients[1, 1] <- 'S'
missinrow[1, 1] <- 1
}
}
}
#Later sessions
for (j in 2 : s)
{
if (patients[1,(j-1)] == 'A'|patients[1,(j-1)] == 'S')
{
invited[1,j] <- invited[1,(j-1)] + 1
} else
{
invited[1,j] <- invited[1,(j-1)]
}
if (invited[1,j] <= maxses & missinrow[1,j] < m)
{
# Skip or attend
# If attended previous session
if (patients[1, (j-1)] == 'A')
{
if (classlist[1] == "D")
{if (runif(1) < drop) {patients[1, j] <- 'A'} else
{
patients[1, j] <- 'S'
missinrow[1, j] <- 1
}
}
if (classlist[1] == "T")
{if (runif(1) < titrate) {patients[1, j] <- 'A'} else
{
patients[1, j] <- 'S'
missinrow[1, j] <- 1
}
}
if (classlist[1] == "C")
{if (runif(1) < complete) {patients[1, j] <- 'A'} else
{
patients[1, j] <- 'S'
missinrow[1, j] <- 1
}
}
if (classlist[1] == "N")
{
if (runif(1) < noise) {patients[1, j] <- 'A'} else
{
patients[1, j] <- 'S'
missinrow[1, j] <- 1
}
}
if (classlist[1] == "O")
{
if (runif(1) < other) {patients[1, j] <- 'A'} else
{
patients[1, j] <- 'S'
missinrow[1, j] <- 1
}
}
} else
# If skipped previous session
if (patients[1, (j-1)] == 'S')
{
if (classlist[1] == "D")
{
if (runif(1) < drop) {patients[1, j] <- 'A'} else
{
patients[1, j] <- 'S'
missinrow[1, j] <- missinrow[1, (j-1)] + 1
}
}
if (classlist[1] == "T")
{
if (runif(1) < titrate) {patients[1, j] <- 'A'} else
{
patients[1, j] <- 'S'
missinrow[1, j] <- missinrow[1, (j-1)] + 1
}
}
if (classlist[1] == "C")
{if (runif(1) < complete) {patients[1, j] <- 'A'} else
{
patients[1, j] <- 'S'
missinrow[1, j] <- missinrow[1, (j-1)] + 1
}
}
if (classlist[1] == "N")
{if (runif(1) < noise) {patients[1, j] <- 'A'} else
{
patients[1, j] <- 'S'
missinrow[1, j] <- missinrow[1, (j-1)] + 1
}
}
if (classlist[1] == "O")
{
if (runif(1) < other) {patients[1, j] <- 'A'} else
{
patients[1, j] <- 'S'
missinrow[1, j] <- missinrow[1, (j-1)] + 1
}
}
}
} else {patients[1,j] <- 'D'}
# check for number of attended or missed sessions
if (patients[1,(j-1)] == 'A' | patients[1,(j-1)] == 'S')
{
insess[j] <- 1
} else
{
insess[j] <- 0
}
}
#Second patients
#Patient is waiting and there is space
#First session
if (insess[1] < maxses & waitlist[1] > 0) #THIS MAY NEED TO BE A WHILE LOOP, FOR MULTIPLE PATIENTS
{
invited[2,1] <- 1
insess[1] <- insess[1] + 1
if (classlist[2] == "D")
{
if (runif(1) < dropnew) {patients[1, 1] <- 'A'} else
{
patients[2, 1] <- 'S'
missinrow[2, 1] <- 1
}
}
if (classlist[2] == "T")
{
if (runif(1) < titratenew) {patients[2, 1] <- 'A'} else
{
patients[2, 1] <- 'S'
missinrow[2, 1] <- 1
}
}
if (classlist[2] == "C")
{
if (runif(1) < completenew) {patients[2, 1] <- 'A'} else
{
patients[2, 1] <- 'S'
missinrow[2, 1] <- 1
}
}
if (classlist[2] == "N")
{
if (runif(1) < noisenew) {patients[2, 1] <- 'A'} else
{
patients[2, 1] <- 'S'
missinrow[2, 1] <- 1
}
}
if (classlist[2] == "O")
{
if (runif(1) < othernew) {patients[2, 1] <- 'A'} else
{
patients[2, 1] <- 'S'
missinrow[2, 1] <- 1
}
}
}
#Later sessions
#Patient invited previous session
for (j in 2 : s)
{
if (patients[2,(j-1)] == 'A'|patients[2,(j-1)] == 'S')
{
invited[2,j] <- invited[2,(j-1)] + 1
} else
{
invited[2,j] <- invited[2,(j-1)]
}
if (invited[2,j] <= maxses & missinrow[2,j] < m)
{
# Skip or attend
# If attended previous session
if (patients[2, (j-1)] == 'A')
{
if (classlist[2] == "D")
{if (runif(1) < drop) {patients[2, j] <- 'A'} else
{
patients[2, j] <- 'S'
missinrow[2, j] <- 1
}
}
if (classlist[2] == "T")
{if (runif(1) < titrate) {patients[2, j] <- 'A'} else
{
patients[2, j] <- 'S'
missinrow[2, j] <- 1
}
}
if (classlist[2] == "C")
{if (runif(1) < complete) {patients[2, j] <- 'A'} else
{
patients[2, j] <- 'S'
missinrow[2, j] <- 1
}
}
if (classlist[2] == "N")
{
if (runif(1) < noise) {patients[2, j] <- 'A'} else
{
patients[2, j] <- 'S'
missinrow[2, j] <- 1
}
}
if (classlist[2] == "O")
{
if (runif(1) < other) {patients[2, j] <- 'A'} else
{
patients[2, j] <- 'S'
missinrow[2, j] <- 1
}
}
} else
# If skipped previous session
if (patients[2, (j-1)] == 'S')
{
if (classlist[2] == "D")
{
if (runif(1) < drop) {patients[2, j] <- 'A'} else
{
patients[2, j] <- 'S'
missinrow[2, j] <- missinrow[2, (j-1)] + 1
}
}
if (classlist[2] == "T")
{
if (runif(1) < titrate) {patients[2, j] <- 'A'} else
{
patients[2, j] <- 'S'
missinrow[2, j] <- missinrow[2, (j-1)] + 1
}
}
if (classlist[2] == "C")
{if (runif(1) < complete) {patients[2, j] <- 'A'} else
{
patients[2, j] <- 'S'
missinrow[2, j] <- missinrow[2, (j-1)] + 1
}
}
if (classlist[2] == "N")
{if (runif(1) < noise) {patients[2, j] <- 'A'} else
{
patients[2, j] <- 'S'
missinrow[2, j] <- missinrow[2, (j-1)] + 1
}
}
if (classlist[2] == "O")
{
if (runif(1) < other) {patients[2, j] <- 'A'} else
{
patients[2, j] <- 'S'
missinrow[2, j] <- missinrow[2, (j-1)] + 1
}
}
}
} else {patients[2,j] <- 'D'}
# check for number of attended or missed sessions
if (patients[2,(j-1)] == 'A' | patients[2,(j-1)] == 'S')
{
insess[j] <- insess[j] + 1
} else
{
insess[j] <- insess[j]
}
}
。
ヨシュアはさらに助けることができるようにするために追加の情報を求めました。
全体的な問題は、治療の異なるセッションに出席した患者のデータセットを作成することです。彼らが出席するかどうかは、彼らはすでにどちらか参加したセッション数(classlist
である)彼らは患者のどのような「クラス」(patients
である)前のセッションを、出席したかどうかを含め、多数のパラメータに依存します(invited
)をスキップし、1行にいくつのセッションが欠落しているか(missinrow
);それらのすべてが変わるでしょう。前回のセッションが満杯になっていない場合は、新しいセッションに追加の患者が割り当てられます(waitlist
)
私は一度にこの患者を務めるとうまくいきますが、すべての患者の上に、私はこれは、より大きなプログラムの一部である。私はそれが思った通りに動作しない理由を私は理解することはできません。コードは
for(i in 2:p)
{
while (insess[1] < maxses & waitlist[1] > 0)
{
invited[i,1] <- 1
waitlist[1] <- waitlist[1] - 1
insess[1] <- insess[1] + 1
if (classlist[i] == "D")
{
if (runif(1) < dropnew) {patients[i, 1] <- 'A'} else
{
patients[i, 1] <- 'S'
missinrow[i, 1] <- 1
}
}
if (classlist[i] == "T")
{
if (runif(1) < titratenew) {patients[i, 1] <- 'A'} else
{
patients[i, 1] <- 'S'
missinrow[i, 1] <- 1
}
}
if (classlist[i] == "C")
{
if (runif(1) < completenew) {patients[i, 1] <- 'A'} else
{
patients[i, 1] <- 'S'
missinrow[i, 1] <- 1
}
}
if (classlist[i] == "N")
{
if (runif(1) < noisenew) {patients[i, 1] <- 'A'} else
{
patients[i, 1] <- 'S'
missinrow[i, 1] <- 1
}
}
if (classlist[i] == "O")
{
if (runif(1) < othernew) {patients[i, 1] <- 'A'} else
{
patients[i, 1] <- 'S'
missinrow[i, 1] <- 1
}
}
}
}
ある
こんにちは
に実行します
これを実行すると、30になります(w私はまた、クラスリストに適切な値があることを確認しました。これは、クラスリストが適切な値を持っていることを確認しました。
ループからどこを離れるのかわかりません。私は誤って使用していると思うが、どうしたらよいかわからない。
ありがとうございました!
いくつかのサンプルデータ(入力と出力)は非常に役立ちます。 –
こんにちはJoshua - 入力がありません。データを作成することがポイントなので、私は患者ごとにデータを作成するプログラムを用意していますが、すべての患者のデータを作成するためにループに入れたいと思います。 –