Что означает (х) в следующем отрывке? - PullRequest
1 голос
/ 04 мая 2020

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

bench_nor2 <- function(x,repeats) { system.time(rep(
# without explicit return 
(function(x)vector(length=x,mode="numeric"))(x),repeats)) }

Я играл с кодами статьи, но логика c позади этот крошечный (x) (в частности, это 2-е вхождение) в 3-й строке мне неясен.

1 Ответ

0 голосов
/ 04 мая 2020

Это анонимная функция. Если мы развернем код

bench_nor2 <- function(x,repeats) { system.time(rep(
  # without explicit return 
   (function(x) 
      vector(length=x,mode="numeric")
   )(x),  
  repeats)) }

, мы увидим, что в вызове rep( ... ) первый аргумент -

(function(x)vector(length=x,mode="numeric"))(x)

Теперь, это любопытный способ выразить это. Но получается, что function(x) vector(...) определяет однострочную функцию (которая вызывает vector для создания вектора чисел c длины x). Обернутая в скобки (function(x) ...) возвращает функцию, а затем (function(x) ...)(x) вызывает анонимную функцию с аргументом x.

Вы получите тот же результат от:

my_vector <- function(y) vector(length=y, mode="numeric")
bench_nor2 <- function(x, repeats) {system.time(rep(my_vector(x), repeats))}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...