Как изменить значения вектора с помощью индекса? - PullRequest
1 голос
/ 03 февраля 2020

Я говорю об индексах, относящихся к порядку, поскольку R хранит каждое значение. Теперь я хочу редактировать только значения объекта, но при условии, что его индекс нечетные числа (1 3 5 7 9 ..)

b [ index ]

есть следующие переменные

a <- c("a","b","c","d") # 4 values
b <- rep(NaN,length(a)*2 ) # 8 values

теперь в векторе b У меня есть 8 данных, и моя цель - изменить значения нечетным образом:

> b[1]
[1] "a"

> b[5]
[1] "c"

> b[2]
[1] NaN

> b[6]
[1] NaN

> b[3]
[1] "b"

>  b[7]
[1] "d"

> b[4]
[1] NaN

> b[8]
[1] NaN

Есть ли автоматы c способ сделать этот процесс? пример for(i in(1:length(b)))

b[2*(1:length(a))- 1 ] = a

ошибка только 0 могут быть смешаны с отрицательными подписками

Ответы [ 3 ]

1 голос
/ 03 февраля 2020
a <- c("a","b","c","d")
# use the right data type
b <- rep(NA_character_,length(a)*2 )

# generate odd numbers
seq(from = 1, length.out = length(a), by = 2)
# [1] 1 3 5 7

#  do replacement
b[seq(from = 1, length.out = length(a), by = 2)] = a

b
# [1] "a" NA  "b" NA  "c" NA  "d" NA 

Ваш код последовательности также работает. Нет необходимости в петлях:

b[2*(1:length(a))- 1 ] = a
1 голос
/ 03 февраля 2020

Мы можем использовать индекс переработки с логическим индексом

b[c(TRUE, FALSE)] <- a
b
#[1] "a"   "NaN" "b"   "NaN" "c"   "NaN" "d"   "NaN"
0 голосов
/ 03 февраля 2020

Еще один вариант может быть:

b[seq_along(b) %% 2 == 1] <- a

[1] "a"   "NaN" "b"   "NaN" "c"   "NaN" "d"   "NaN"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...