R, продолжить после ошибки в l oop с комбинацией аргументов - PullRequest
0 голосов
/ 27 февраля 2020

Я создал oop для довольно повторяющейся «функции» или фрагмента кода.

Я делаю фильтр dplyr набора данных на основе двух переменных. Затем я делаю линейную модель, вычисляю средние значения и выполняю тест LSD.

l oop, который я сделал, заполняет переменные в фильтре.

for(x in c("B1", "B2", "B3")){
  for(z in c(1:5)){
  df <- filter(testb, column1== x, column2 == z )
#rest of functions here

l oop работает отлично. Единственная проблема, с которой я столкнулся, - это когда l oop пытается отфильтровать x: B2 с z: 5, так как эта комбинация не существует в наборе данных. Я получаю следующую ошибку:

Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
contrasts can be applied only to factors with 2 or more levels

Я точно знаю, почему это создает ошибку, поскольку у множителя столбца 2 z = 5 не существует. Я бы хотел, чтобы l oop продолжил до следующей переменной столбцов 1 и 2, если это произойдет, поэтому go до x: B3 и z: 1.

Код работает нормально, когда я использую

for(z in c(1:4)){

Но мне не хватает комбинаций x: B1 и x: B3 с z: 5.

Позже я бы хотел сделать больше переменных из column1, но их будет много больше несовпадений с комбинациями x и z.

Кто-нибудь есть советы?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020
for(x in c("B1", "B2", "B3")){
  for(z in c(1:5)){
    tryCatch({df <- filter(testb, column1== x, column2 == z)},
             next)
  }
}
0 голосов
/ 27 февраля 2020

Я не могу проверить это без воспроизводимого примера , но изменение вашего кода на:

for(x in c("B1", "B2", "B3")){
  for(z in c(1:5)){
     if(any(testb$column1 == x & testb$column2 == z)){
        df <- filter(testb, column1== x, column2 == z )

может помочь.

...