Использование ‘[‘ квадратная скобка как функция для lapply в R

Я видел, что функция, используемая в R, используется для извлечения элементов из матриц, которые существуют в списке матриц.

Например, у меня есть список из 3 (2×2) матриц, и я хочу извлечь элемент [1,2] из каждой из этих 3-х матриц.

Код: list1 = lapply(mylist, '[', 1,2) работает просто отлично. Он возвращает список с этими тремя элементами.

Я пытаюсь исследовать, что именно это делает. Google не помог и не использовал ?'[' В помощи R не слишком объяснительно. Я не вижу, как '[' является функцией в R, поэтому код не интуитивно понятен.

Квадратные скобки на самом деле являются функцией, первым аргументом которой является подмножество объекта. Последующие аргументы – это индекс этого подмножества.

 # For example, if M is a matrix M[1, 2] # extracts the element at row 1, col 2 # is the same as `[`(M, 1, 2) # Try them! 

Теперь рассмотрим аргументы:

 args(lapply) # function (X, FUN, ...) 

Все, что представлено в этих точках, передается функции FUN качестве аргументов.

Таким образом, когда FUN="[" , первый аргумент "[" является текущим элементом списка (выполняется повторение), т. Е. Подмножество объекта. В то время как последующие аргументы являются индексами для "["

Операторы в R являются просто функциями.

Они эквивалентны:

 > x <- list(a=1,b=2) > x[1] $a [1] 1 > `[`(x,1) $a [1] 1 

Обратные ссылки необходимы только для предотвращения интерпретации анализатором (например, чтобы сказать, что это имя функции, чтобы не начинать интерпретацию [ преждевременно).

Будучи функцией, он следует тем же объектно-ориентированным правилам (в данном случае S3), как и все остальное.

 > methods(`[`) [1] [.acf* [.arrow* [.AsIs [.bibentry* [.cluster* [.data.frame [.data.table* [8] [.Date [.difftime [.envlist* [.factor [.formula* [.fractions* [.getAnywhere* [15] [.gList* [.gpar* [.gtable* [.hexmode [.idf* [.indexed* [.insensitive* [22] [.ITime* [.listof [.noquote [.numeric_version [.octmode [.pdf_doc* [.person* [29] [.POSIXct [.POSIXlt [.quoted* [.raster* [.roman* [.shingle* [.simple.list [36] [.split* [.terms* [.trellis* [.ts* [.tskernel* [.uneval* [.unit* [43] [.unit.arithmetic* [.unit.list* [.vpPath* Non-visible functions are asterisked 

+ , = и т. д., и другие операторы работают так же.

  • листинг содержимого файла данных R без загрузки
  • Отменить список фреймов данных
  • Преобразование серийного номера excel DateTime в R DateTime
  • Как найти разницу в стоимости в каждых двух последовательных строках в R?
  • Для каждой строки возвращаем имя столбца наибольшего значения
  • Что делает функция invisible ()?
  • Как удалить несколько значений из вектора?
  • R: неверная многобайтовая строка
  • Как подсчитать количество уникальных значений по группе?
  • Последовательные / подвижные суммы в векторе в R
  • promise уже оценивается: рекурсивный аргумент аргумента по умолчанию или более ранние проблемы?
  • Давайте будем гением компьютера.