Что может быть причиной того, что оператор if в R-цикле рассматривает только первое условие цикла? - PullRequest
0 голосов
/ 21 ноября 2018

Я потратил несколько часов, пытаясь понять, почему этот цикл не работает.Он продолжает печатать '1' .Используемый набор данных содержит комбинации из 4 переменных, хотя кажется, что неудачный цикл охватывает только первую:

data$newcolumn <- for (newcolumn in 1:nrow(data)) 
    {if(data$Male_exposure=="High" && data$Quality=="HighQ") {print(1)}
       if (data$Male_exposure=="High"&& data$Quality=="LowQ") {print(2)}
       if (data$Male_exposure=="Low"&& data$Quality=="HighQ") {print(3)}
       if (data$Male_exposure=="Low"&& data$Quality=="LowQ") {print(4)}}

Почему это может иметь место?

1 Ответ

0 голосов
/ 21 ноября 2018

Вы должны использовать ifelse здесь, который уже векторизован.Но есть потенциально более чистый способ выразить свою логику, используя case_when из пакета dplyr:

library(dplyr)

data$newcolumn <- case_when(
    data$Male_exposure == "High" && data$Quality == "HighQ" ~ 1,
    data$Male_exposure == "High" && data$Quality == "LowQ"  ~ 2,
    data$Male_exposure == "Low"  && data$Quality == "HighQ" ~ 3,
    data$Male_exposure == "Low"  && data$Quality == "LowQ"  ~ 4
    TRUE ~ 5
)

Если вы действительно хотите продолжить свой циклический подход, то вам действительно нужно сделатьиспользование счетчика цикла внутри кода цикла:

data$newcolumn <- for (i in 1:nrow(data)) {
    if (data[i, "Male_exposure"] == "High" && data[i, "Quality"] == "HighQ") {
        print(1)
    }
    if (data[i, "Male_exposure"] == "High" && data[i, "Quality"] == "LowQ") {
        print(2)
    }
    if (data[i, "Male_exposure"] == "Low" && data[i, "Quality"] == "HighQ") {
        print(3)
    }
    if (data[i, "Male_exposure"] == "Low" && data[i, "Quality"] == "LowQ") {
        print(4)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...