Как R обрабатывает позиционные аргументы

Я парень с python и очень новичок в R (до сих пор все, что я сделал, это скопировал-вставил код и сделал скриншот полученного графика).

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

Пытаясь создать свой первый сюжет, я столкнулся с этим вызовом функции:

sets_options("universe", seq(from = 0, to = 25, by = 0.1))

Теперь я хотел бы знать, могу ли я добиться того же результата, позвонив

sets_options("universe", seq(0, 25, 0.1))

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

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


person inspectorG4dget    schedule 26.10.2013    source источник
comment
Полная информация о том, как сопоставляются аргументы: cran.r-project.org/doc/manuals/r-release/. Грубо говоря, сначала сопоставляются именованные аргументы, затем оставшиеся (передаваемые) аргументы сопоставляются с оставшимися (формальными) аргументами позиционно.   -  person Brian Diggs    schedule 26.10.2013
comment
Некоторые комментарии о том, когда использовать именованное имя или позицию в adv-r.had .co.nz/Functions.html#вызывающие-функции   -  person hadley    schedule 26.10.2013


Ответы (2)


При вызове sets_options() отобразятся текущие настройки. Из следующего журнала кажется, что позиционные аргументы обрабатываются должным образом:

> sets_options("universe", seq(0,5,0.25))
> sets_options()
$quote
[1] TRUE

$hash
[1] TRUE

$openbounds
[1] "()"

$universe
 [1] 0.00 0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00 2.25 2.50 2.75 3.00 3.25 3.50 3.75 4.00 4.25 4.50 4.75 5.00

> sets_options("universe", seq(from=0,to=5,by=0.25))
> sets_options()
$quote
[1] TRUE

$hash
[1] TRUE

$openbounds
[1] "()"

$universe
 [1] 0.00 0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00 2.25 2.50 2.75 3.00 3.25 3.50 3.75 4.00 4.25 4.50 4.75 5.00
person inspectorG4dget    schedule 26.10.2013
comment
Правильный. Позиционные аргументы всегда допустимы в R, а порядок, присутствующий в python, отсутствует в R. Вы также можете определить аргументы своей функции в любом порядке. - person Justin; 26.10.2013

Вопрос в том, что делает seq с позиционными и именованными объектами. Чтобы решить эту проблему, посмотрите на страницу ?seq, на которой перечислены именованные аргументы и их порядок:

seq(from = 1, to = 1, by = ((to - from)/(length.out - 1)),
length.out = NULL, along.with = NULL, ...)

Таким образом, seq(0, 25, 0.1) будет интерпретироваться так же, как seq(from = 0, to = 25, by = 0.1), поскольку порядок такой же, как имя в списке использования.

person IRTFM    schedule 26.10.2013
comment
Я прочитал эту страницу и попытался прийти к выводу, который вы предлагаете. Однако я заметил, что by по умолчанию равно ((to - from)/(length.out - 1)), а length.out по умолчанию равно NULL. Таким образом, я не мог быть уверен в том, какие переменные принимают какие значения, поскольку одно из назначений по умолчанию использует значение, которое я не предоставляю. - person inspectorG4dget; 27.10.2013
comment
Ваши значения заменяют значения по умолчанию. - person IRTFM; 27.10.2013
comment
Но что, если я не укажу значение для ((to - from)/(length.out - 1))? - person inspectorG4dget; 27.10.2013
comment
Затем by вычисляется с использованием этого выражения на основе того, что дано from, to и length.out. - person IRTFM; 27.10.2013
comment
Но я до сих пор не указал length.out, который по умолчанию равен NULL. - person inspectorG4dget; 27.10.2013
comment
Думаю, вам нужно обратиться к высшему арбитру, коду seq.default. - person IRTFM; 27.10.2013
comment
Это фантастическая идея. Спасибо - person inspectorG4dget; 27.10.2013