[英]Issues with nested while loop in for loop for R
我正在使用R為我在大學進行的研究項目編寫模擬代碼。 創建相關數據結構並生成數據后,我嘗試通過某種效果K隨機修改20 x 20矩陣中觀察值的比例P(以0.02為增量)。為了隨機確定要修改的觀察值,我對a等於P * 400的整數的兩倍,代表行(rRow)和列(rCol)索引。 為了保證沒有觀察值會被修改一次以上,我執行以下算法:
我創建一個矩陣alrdyModded,它是20 x 20並初始化為0s。
我在rRow和rCol中獲取第一個值,並檢查alrdyModded [rRow [1]] [rCol [1]] == 1; 當alrdyModded [rRow [1]] [rCol [1]] == 1時,我為索引隨機選擇新的整數,直到== 0
當alrdyModded [rRow [1]] [rCol [1]] == 0時,修改具有相同索引的處理矩陣中的值,並將alrdyModded [rRow [1]] [rCol [1]]更改為1
重復整個rRow和rCol向量的長度
我相信執行此操作的一個好方法是嵌套在for循環中的while循環。 但是,當我在R中輸入以下代碼時,收到以下錯誤代碼:
R代碼:
propModded<-1.0
trtSize<-2
numModded<-propModded*400
trt1<- matrix(rnorm(400,0,1),nrow = 20, ncol = 20)
cont<- matrix(rnorm(400,0,1),nrow = 20, ncol = 20)
alrdyModded1<- matrix(0, nrow = 20, ncol = 20)
## data structures for computation have been intitialized and filled
rCol<-sample.int(20,numModded,replace = TRUE)
rRow<-sample.int(20,numModded,replace = TRUE)
## indices for modifying observations have been generated
for(b in 1:numModded){
while(alrdyModded1[rRow[b]][rCol[b]]==1){
rRow[b]<-sample.int(20,1)
rCol[b]<-sample.int(20,1)}
trt1[rRow[b]][rCol[b]]<-'+'(trt1[rRow[b]][rCol[b]],trtSize)
alrdyModded[rRow[b]][rCol[b]]<-1
}
## algorithm for guaranteeing no observation in trt1 is modified more than once
R OUTPUT “ while出錯(alrdyModded1 [rRow [b]] [rCol [b]] == 1){:缺少值,其中需要TRUE / FALSE”
當我取出for循環並運行代碼時,while循環對語句的評估就很好了,這意味着從rRow和rCol向量訪問正確的值存在問題。 對於解決此問題的任何幫助,我將不勝感激。
看來您沒有在矩陣內建立索引。 而不是像while(alrdyModded1[rRow[b]][rCol[b]]==1){
,應改為: while(alrdyModded1[rRow[b], rCol[b]]==1){
。 矩陣的索引如下: matrix[1, 1]
,好像您忘記了逗號。 for循環應該更接近於此:
for(b in 1:numModded){
while(alrdyModded1[rRow[b], rCol[b]]==1){
rRow[b]<-sample.int(20,1)
rCol[b]<-sample.int(20,1)}
trt1[rRow[b], rCol[b]]<-'+'(trt1[rRow[b], rCol[b]],trtSize)
alrdyModded1[rRow[b], rCol[b]]<-1
}
附帶說明一下,為什么不使alrdyModded1為布爾型矩陣(僅填充TRUE和FALSE值),並在第7行中使用alrdyModded1<- matrix(FALSE, nrow = 20, ncol = 20)
,並且條件為while(alrdyModded1[rRow[b], rCol[b]]){
代替?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.