Как вставить элементы в вектор?

Одна из проблем, которые я имею со ВСЕМИ платформами журналирования, - то, что, если все в Вашей команде не проводят время для становления опытными в точно, как настроить ее и управлять ею, Вы никогда не знаете, распечатает ли данный оператор отладки или нет.

можно было выключить уровень (отладка), или можно было выключить один пакет.

я потратил впустую слишком много времени, предполагая, что оператор отладки распечатал бы, и он не делает. Теперь я главным образом полагаюсь на System.out.println () и просто прохожу и удаляю или преобразовываю их, когда я сделан, отладив.

я знаю, что это не отвечает на Ваш вопрос - я просто говорю, что можно хотеть рассмотреть, сколько выравнивания Вы имеете перед добавляющей сложностью.

Вход не состоит в том, что сложный и конечно выравнивается по ширине на большинстве больших проектов.

42
задан Donnied 12 April 2014 в 22:15
поделиться

4 ответа

С индексами можно творить чудеса:

Сначала создайте вектор с выходными значениями:

probs <- rep(TRUE, 15)
ind <- c(5, 10)
val <- c( probs, rep(FALSE,length(ind)) )
# > val
#  [1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
# [13]  TRUE  TRUE  TRUE FALSE FALSE

Теперь уловка. Каждый старый элемент получает ранг, каждый новый элемент получает половинный ранг

id  <- c( seq_along(probs), ind+0.5 )
# > id
#  [1]  1.0  2.0  3.0  4.0  5.0  6.0  7.0  8.0  9.0 10.0 11.0 12.0 13.0 14.0 15.0
# [16]  5.5 10.5

Затем используйте порядок для сортировки в правильном порядке:

val[order(id)]
#  [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
# [13]  TRUE  TRUE  TRUE  TRUE  TRUE
35
ответ дан 26 November 2019 в 23:22
поделиться

Все это очень творческие подходы. Я думаю, что работа с индексами - это определенно правильный путь (решение Марека очень хорошее).

Я бы просто упомянул, что есть функция, которая делает примерно это: append () .

probes <- rep(TRUE, 15)
probes <- append(probes, FALSE, after=5)
probes <- append(probes, FALSE, after=11)

Или вы можете сделать это рекурсивно с вашими индексами (вам нужно увеличивать значение «после» на каждой итерации):

probes <- rep(TRUE, 15)
ind <- c(5, 10)
for(i in 0:(length(ind)-1)) 
    probes <- append(probes, FALSE, after=(ind[i+1]+i))

Между прочим, этот вопрос также ранее задавался в R-Help . Как говорит Барри:

«На самом деле я бы сказал, что не было способов сделать это, так как я не думаю, что вы действительно можете вставить в вектор - вам нужно создать новый вектор, который создает иллюзию вставки!»

69
ответ дан 26 November 2019 в 23:22
поделиться

Как насчет этого:

> probes <- rep(TRUE, 15)
> ind <- c(5, 10)

> probes.ind <- rep(NA, length(probes))
> probes.ind[ind] <- FALSE
> new.probes <- as.vector(rbind(probes, probes.ind))
> new.probes <- new.probes[!is.na(new.probes)]
> new.probes
 [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
[13]  TRUE  TRUE  TRUE  TRUE  TRUE
8
ответ дан 26 November 2019 в 23:22
поделиться

Это довольно сложно. Вот один способ. Он перебирает список, вставляя каждый раз, так что это не слишком эффективно.

probes <- rep(TRUE, 15)
probes.ind <- ind + 0:(length(ind)-1)
for (i in probes.ind) {
  probes <- c(probes[1:i], FALSE, probes[(i+1):length(probes)])
}

> probes
 [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
[13]  TRUE  TRUE  TRUE  TRUE  TRUE

Это должно работать, даже если в ind есть повторяющиеся элементы, хотя для работы конструкции probes.ind требуется сортировка ind.

2
ответ дан 26 November 2019 в 23:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: