неожиданное поведение замены - PullRequest
2 голосов
/ 24 января 2011

Мне нужна помощь с командой replace()

replace(c(3,2,2,1),1:3,4:6)

Я ожидал вывода 6,5,5,4, но получил 4,5,6,1

Что я делаю не так?

Мое понимание того, что заменить, заключается в следующем: он ищет значения индекса элементов первого аргумента во втором аргументе (например, 3 является третьим элементом в 1: 3) и затем заменяет его элементами третьего аргумента на тот же индекс (например, 3-й элемент в 4: 6 равен 6, поэтому я ожидаю, что первый элемент в векторе будет 6)

Спасибо. (заменить файл справки не имеет примера ... нужно попросить разъяснений здесь)

Ответы [ 3 ]

6 голосов
/ 24 января 2011

Хотя replace не дает желаемого поведения, добиться того, что вы хотели, довольно просто, используя match:

new[match(x,i)]
4 голосов
/ 24 января 2011

Все это дано в описании replace(), просто внимательно прочитайте:

 ‘replace’ replaces the values in ‘x’ with indices given in ‘list’
 by those given in ‘values’. If necessary, the values in ‘values’
 are recycled.


x <- c(3, 2, 2, 1)
i <- 1:3
new <- 4:6

, так что в вашем случае это означает:

x[i] <- new
2 голосов
/ 24 января 2011

Эта команда говорит, что нужно взять вектор c (3, 2, 2, 1) и заменить компоненты индексами в 1: 3 на значения, заданные вектором 4: 6.Это дает с (4, 5, 6, 1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...