В чем разница между & ldquo; = & rdquo; и & ldquo; < - & rdquo; в R?

Установите текущую ячейку следующим образом:

DataGridView1.CurrentCell = DataGridView1.Rows[rowindex].Cells[columnindex]

или

DataGridView1.CurrentCell = DataGridView1.Item("ColumnName", 5)

, и вы можете напрямую сфокусироваться с помощью Редактирования:

dataGridView1.BeginEdit(true)
638
задан nbro 8 March 2018 в 09:30
поделиться

3 ответа

Руководство по стилю R от Google упрощает проблему, запрещающий "=" для присвоения. Неплохой выбор.

https://google.github.io/styleguide/Rguide.xml

Руководство по R подробно описывает все 5 операторов присваивания.

http: //stat.ethz. ch / R-manual / R-patched / library / base / html / assignOps.html

102
ответ дан 22 November 2019 в 21:44
поделиться

Операторы <- и = присваиваются среде, в которой они оцениваются. Оператор <- может использоваться где угодно, тогда как оператор = разрешен только на верхнем уровне (например, в полном выражении, вводимом в командной строке ) или как одно из подвыражений в списке выражений в фигурных скобках.

24
ответ дан 22 November 2019 в 21:44
поделиться

Разница в операторах присваивания становится более очевидной, когда вы используете их для установки значения аргумента при вызове функции. Например:

median(x = 1:10)
x   
## Error: object 'x' not found

В этом случае x объявлен в области действия функции, поэтому он не существует в рабочей области пользователя.

median(x <- 1:10)
x    
## [1]  1  2  3  4  5  6  7  8  9 10

В этом случае x объявлен в рабочей области пользователя, поэтому вы можете использовать его после завершения вызова функции.


В сообществе R обычно предпочитают использовать <- для назначения (кроме сигнатур функций ) для совместимости с (очень) старыми версиями S-Plus. Обратите внимание, что пробелы помогают прояснить ситуации, подобные

x<-3
# Does this mean assignment?
x <- 3
# Or less than?
x < -3

. В большинстве R IDE есть сочетания клавиш, которые упрощают ввод <- . Ctrl + = в Architect, Alt + - в RStudio ( Option + - в macOS), Shift + - (подчеркивание) в emacs + ESS.


Если вы предпочитаете писать от = до <- , но хотите использовать более общий символ назначения для публично выпущенного кода (в CRAN, например), то вы можете использовать одну из функций tidy _ * в пакете formatR , чтобы автоматически заменить = на <- .

library(formatR)
tidy_source(text = "x=1:5", arrow = TRUE)
## x <- 1:5

Ответ на вопрос «Почему x <- y = 5 выдает ошибку, но не x <- y <- 5 ?» это «Все дело в магии, содержащейся в парсере». Синтаксис R содержит множество неоднозначных случаев , которые необходимо разрешить тем или иным способом. Синтаксический анализатор выбирает разрешение битов выражения в разном порядке в зависимости от того, использовалось ли = или <- .

Чтобы понять, что происходит, вам необходимо знать это присвоение молча возвращает присвоенное значение. Вы можете увидеть это более четко, если явно напечатаете, например print (x <- 2 + 3) .

Во-вторых, это станет более ясным, если мы будем использовать префиксную нотацию для присваивания. Итак,

x <- 5
`<-`(x, 5)  #same thing

y = 5
`=`(y, 5)   #also the same thing

Парсер интерпретирует x <- y <- 5 как

`<-`(x, `<-`(y, 5))

. Мы могли бы ожидать, что x <- y = 5 тогда будет

`<-`(x, `=`(y, 5))

, но на самом деле он получает интерпретируется как

`=`(`<-`(x, y), 5)

Это потому, что = имеет более низкий приоритет, чем <- , как показано на странице справки ? Syntax .

вам нужно знать, что присвоение молча возвращает присвоенное значение. Вы можете увидеть это более четко, если явно напечатаете, например print (x <- 2 + 3) .

Во-вторых, это станет более ясным, если мы будем использовать префиксную нотацию для присваивания. Итак,

x <- 5
`<-`(x, 5)  #same thing

y = 5
`=`(y, 5)   #also the same thing

Парсер интерпретирует x <- y <- 5 как

`<-`(x, `<-`(y, 5))

. Мы могли бы ожидать, что x <- y = 5 тогда будет

`<-`(x, `=`(y, 5))

, но на самом деле он получает интерпретируется как

`=`(`<-`(x, y), 5)

Это потому, что = имеет более низкий приоритет, чем <- , как показано на странице справки ? Syntax .

вам нужно знать, что присвоение молча возвращает присвоенное значение. Вы можете увидеть это более четко, если явно напечатаете, например print (x <- 2 + 3) .

Во-вторых, это станет более ясным, если мы будем использовать префиксную нотацию для присваивания. Итак,

x <- 5
`<-`(x, 5)  #same thing

y = 5
`=`(y, 5)   #also the same thing

Анализатор интерпретирует x <- y <- 5 как

`<-`(x, `<-`(y, 5))

. Мы могли бы ожидать, что x <- y = 5 тогда будет

`<-`(x, `=`(y, 5))

, но на самом деле он получает интерпретируется как

`=`(`<-`(x, y), 5)

Это потому, что = имеет более низкий приоритет, чем <- , как показано на странице справки ? Syntax .

646
ответ дан 22 November 2019 в 21:44
поделиться
Другие вопросы по тегам:

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