2016-07-11 2 views
1

У меня есть фундаментальная путаница с R. У меня есть фрагмент кода R.R: путаница относительно LHS и RHS назначения и порядка работы

> m <- 1:10 
> m 
[1] 1 2 3 4 5 6 7 8 9 10 
> dim(m) <- c(2,5) 
> m 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 1 3 5 7 9 
[2,] 2 4 6 8 10 

Теперь я C/Python программист и линия dim(m) <- c(2,5) невероятно запутанной для меня. Я понимаю, что он эффективно менял вектор в матрицу, однако, глядя на него, я не понимаю логику/порядок работы.

<- - оператор присваивания в R. Так что для меня логически порядок работы: присваивать (2,5) выходу dim (m). Поскольку выходной сигнал dim (m) не присваивается переменной, выходной сигнал будет потерян.

Может кто-нибудь объяснить, как я должен читать строку dim(m) <- c(2,5)? Каков порядок работы? Кажется, что порядок работы с использованием <- изменяется в зависимости от LHS и RHS уравнения.

ответ

2

Это специальные функции, называемые заменами. Я цитирую книгу Хэдли «Advanced-R»:

Запасные функции действуют так, как будто они изменяют свои аргументы на месте и имеют специальное имя xxx <. Обычно они имеют два аргумента (x и значение), хотя они могут иметь больше, и они должны возвращать модифицированный объект. Например, следующая функция позволяет изменять второй элемент вектора:

`second<-` <- function(x, value) { 
    x[2] <- value 
    x 
} 
x <- 1:10 
second(x) <- 5L 
x 
#> [1] 1 5 3 4 5 6 7 8 9 10 

Когда R оценивает назначение второго (х) < - 5, он замечает, что левая часть из < - это не простое имя, поэтому он ищет функцию с именем second < - для замены.

Вы можете проверить полную главу here под заголовком Замена.

Смежные вопросы