Вот немного кода, чтобы проиллюстрировать мою проблему:Присвоить вектор индексацию другой вектор
x <- 1:10
# > x
# [1] 1 2 3 4 5 6 7 8 9 10
y <- rep(letters[1:2], 5)
# > y
# [1] "a" "b" "a" "b" "a" "b" "a" "b" "a" "b"
z <- rep(c(5,4), 5)
# > z
# [1] 5 4 5 4 5 4 5 4 5 4
Теперь, в зависимости, в каком порядке я выполняю следующие две команды я получаю различные subassignments:
x
первый, второйy
:x[(x == 2) & (y != "a") & (z == 4)] <- "a" # > x # [1] "1" "a" "3" "4" "5" "6" "7" "8" "9" "10" y[(x == 2) & (y != "a") & (z == 4)] <- "a" # > y # [1] "a" "b" "a" "b" "a" "b" "a" "b" "a" "b"
y
первый, второйx
:y[(x == 2) & (y != "a") & (z == 4)] <- "a" # > y # [1] "a" "a" "a" "b" "a" "b" "a" "b" "a" "b" x[(x == 2) & (y != "a") & (z == 4)] <- "a" # > x # [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
Назначение второго вектора зависит от назначения сделано в предыдущем векторе. Следовательно, во втором задании мне нужно убедиться, что у меня есть соответствующие индексы, все еще доступные для второго присваивания. Моя первая идея состоит в том:
x[ind <- ((x == 2) & (y != "a") & (z == 4))] <- "a"
y[ind] <- "a"
rm(ind)
Я хочу, чтобы избежать отдельного вызова сделать присвоение ind
вектора, учитывая, что я могу делать многое из этого. Будет ли это считаться хорошей кодировкой в R
или это может привести к любому коварному поведению, о котором я не думал?
Если индексы элементов 'x' и' y', которые вы хотите изменить, одинаковы, ваша идея работает. Кроме того, вы избегаете повторных вычислений (вы вызываете дважды '(x == 2) & (y! =" A ") & (z == 4)'). Выполняя шаг за шагом, вы меняете 'x' перед' y', и это может повлиять на вычисление элементов 'y', которые вы хотите изменить. – nicola
В вашем случае я бы попытался создать 2 разных вектора, таких как xx и yy, и сделать oparations на них, как: '' yy [(x == 2) & (y! = "A") & (z == 4)] <- "a" '', поэтому вы не измените условия –
Я просто обновил вопрос, чтобы подчеркнуть, что хочу иметь доступные индексы и что я хочу сделать это в ясной форме, но в то же время избегать отдельный вызов для выполнения задания вектора 'ind'. Будет ли это считаться хорошей кодировкой в 'R'. –