Оценка значений и оператор ИЛИ в R - PullRequest
2 голосов
/ 26 июня 2011

В рамках программы R я создаю матрицы пациентов invited и missinrow и скаляры numdrop и maxses. Все они существуют и правильно созданы.

Я тогда попробую эту строку

else if (invited[iPatient, iSession] >= maxses |
  missinrow[iPatient,iSession] >= (numdrop+1 )) {
    patients[iPatient,iSession] <- 'D'}   

Часть до | работает отлично, часть после |, похоже, вообще ничего не делает.

Я попытался превратить эту строку в два утверждения, я попытался || вместо |, я смотрел на это часами.
Помогите! Спасибо

Добавлено 6/28/11 Программа считывает параметры из другого файла и создает данные. Но вот некоторые результаты:

invited[1:5, 1:14] 

1025 * дает *

      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
[1,]    0    1    2    3    4    5    6    7    8     9    10    11    12    12
[2,]    0    1    2    3    4    5    6    7    8     9    10    11    12    12
[3,]    0    1    2    3    4    5    6    7    8     9    10    11    12    12
[4,]    0    0    0    1    2    3    4    5    6     7     8     9    10    11
[5,]    0    0    0    1    2    3    4    5    6     7     8     9    10    11

что хорошо

missinrow[1:5, 1:14]

дает

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
[1,]    1    2    3    4    5    6    7    8    9    10     0     0     0     0
[2,]    1    2    3    4    5    6    7    8    9    10     0     0     0     0
[3,]    1    2    3    4    5    0    0    0    0     0     0     1     0     0
[4,]    0    0    1    2    0    0    1    2    3     4     5     6     7     0
[5,]    0    0    1    2    3    4    5    6    7     8     9    10    11    12

тоже хорошо, но

patients[1:5, 1:14]

дает

    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
[1,] "S"  "S"  "S"  "S"  "S"  "S"  "S"  "S"  "S"  "S"   "A"   "S"   "D"   "D"  
[2,] "S"  "S"  "S"  "S"  "S"  "S"  "S"  "S"  "S"  "S"   "A"   "A"   "D"   "D"  
[3,] "S"  "S"  "S"  "S"  "S"  "A"  "S"  "A"  "A"  "A"   "S"   "S"   "D"   "D"  
[4,] "NA" "W"  "S"  "S"  "A"  "S"  "S"  "S"  "S"  "S"   "S"   "S"   "S"   "A"  
[5,] "NA" "W"  "S"  "S"  "S"  "S"  "S"  "S"  "S"  "S"   "S"   "S"   "S"   "S"  

и мы видим, что ячейки, где invited выше maxses (что равно 12), все D, как и должно быть, но те, где missinrow выше numdrop + 1 (что 4 +1) не D.

1 Ответ

1 голос
/ 26 июня 2011

Вот код, включающий ваше выражение

invited   <- 10 * matrix(12:1, nrow=3)
missinrow <- matrix(1:12, nrow=3)
patients  <- matrix(rep("A",12), nrow=3)
maxses    <- 100
numdrop   <- 7 

for (iPatient in 1:3) { 
    for (iSession in 1:4) {
        if (iPatient==iSession) { patients[iPatient,iSession] <- 'B'}
        else if (invited[iPatient, iSession] >= maxses |
          missinrow[iPatient,iSession] >= (numdrop+1 )) {
            patients[iPatient,iSession] <- 'D'} 
                          }
                      }

Глядя на три матрицы

> invited
     [,1] [,2] [,3] [,4]
[1,]  120   90   60   30
[2,]  110   80   50   20
[3,]  100   70   40   10
> missinrow
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
> patients
     [,1] [,2] [,3] [,4]
[1,] "B"  "A"  "A"  "D" 
[2,] "D"  "B"  "D"  "D" 
[3,] "D"  "A"  "B"  "D" 

Я бы сказал, что оператор else if работал, как и ожидалось, и что "D" в левой части patients соответствовало второму else if условию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...