Искусство программирования R: где еще я могу найти информацию? - PullRequest
9 голосов
/ 13 октября 2011

Я наткнулся на редакционную рецензию на книгу «Программирование на языке R» и обнаружил, что

Программирование на языке «Искусство программирования R» знакомит вас с экскурсоводом по разработке программного обеспечения на языке R с базовых типов.и структуры данных на сложные темы, такие как замыкания, рекурсия и анонимные функции

Я сразу же был очарован идеей анонимных функций, с чем я столкнулся в Python в форме лямбда-функций, но не смогустановить соединение на языке R.

Я искал в руководстве по R и нашел это

Обычно функции назначаются символам, но они не обязательны.Значение, возвращаемое при вызове функции, является функцией.Если этому имени не присвоено имя, оно называется анонимной функцией.Анонимные функции чаще всего используются в качестве аргументов других функций, таких как семейство apply или external.

Эти вещи для не очень давнего программиста, такого как я, «причудливы» в очень интересном видепути.Где я могу найти больше таких книг для R (без необходимости покупать книгу)?

Спасибо, что поделились своими предложениями

Ответы [ 4 ]

17 голосов
/ 13 октября 2011

Функции не имеют имен в R. Если вы случайно не поместили функцию в переменную или нет, это не свойство самой функции, поэтому не существует два вида функций: анонимная ипо имени.Лучшее, что мы можем сделать - это согласиться на вызов функции, которая никогда не была назначена анонимной переменной.

Функция f может рассматриваться как тройка, состоящая из ее формальных аргументов, ее тела и ее окружения.доступны индивидуально через formals(f), body(f) и environment(f).Имя не является частью этой тройки.См. функциональные объекты часть определения языка manual .

Обратите внимание, что если мы хотим, чтобы функция вызывала себя сама, мы можем использовать Recall, чтобы не знать,или нет функция была назначена переменной.Альтернатива состоит в том, что тело функции должно знать, что функция была назначена определенной переменной и каково имя этой переменной.То есть, если функция назначена, например, переменной f, то тело может обратиться к f, чтобы вызвать себя.Recall ограничен функциями самовызывания.Если у нас есть две функции, которые взаимно вызывают друг друга, то аналога Recall не существует - каждая функция должна называть другую, что означает, что каждая функция должна быть назначена переменной, и каждое тело функции должно знать имя переменной, котороедругая функция была назначена.

5 голосов
/ 13 октября 2011

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

Например:

function(x,y) { x+y }

тогда как нормальная именованная функция будет

add <- function(x,y) { x+y }

Функции являются объектами первого класса, поэтому вы можете передавать их (независимо от того, являются ли они анонимными) в качестве аргументов для других функций. Примеры функций, которые принимают другие функции в качестве аргументов, включают apply, lapply и sapply.

4 голосов
/ 13 октября 2011

Получите "The R Inferno" Патрика Бернса на его сайте

Есть несколько хороших веб-сайтов с основными введениями в использование R.

Мне также нравится Руководство Зоокинда

2 голосов
/ 13 октября 2011

Отличные ответы о стиле до сих пор. Вот ответ о типичном использовании анонимных функций в R:

# Make some data up
my.list <- list()
for( i in seq(100) ) {
   my.list[[i]] <- lm( runif(10) ~ runif(10) )
}

# Do something with the data
sapply( my.list, function(x) x$qr$rank )

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

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