Подтвердить что ты не робот

Две точки, ".." в R

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

В качестве примера это число, имеющее этот отличительный цвет:

4..4

Часть "..4" имеет синий цвет ребенка.

Я использую раскраску синтаксиса по умолчанию. Я попробовал в интерпретаторе ввести такую ​​константу, но я получил ошибку "Ошибка: неожиданная числовая константа в" 4..5 ", а запросы с" двумя точками "или.., похоже, не очень дружелюбны к Google.

Кто-нибудь знает, что такое использование "..", если есть?

4b9b3361

Ответ 1

..4 будет зарезервированным словом в R parser. В разделе ?Reserved вы найдете

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

Пример

#  Function will return nth element from ... ( n MUST be a named argument)
f <- function( ... , n = NULL )
   return( eval( parse( text = paste0( ".." , n ) ) ) )

#  Return third element of ...
f( n = 3 , 1:3 , 3:1 , 10:15 )
#[1] 10 11 12 13 14 15

#  Try to return element that is out of bounds
f( n = 4 , 1:3 , 3:1 , 10:15 )
#Error in eval(expr, envir, enclos) : 
#  the ... list does not contain 4 elements

Теперь, когда вы знаете, что это такое, как вы его используете? Предоставлено Джоном Чемберсом;

"Имя ..1 относится к первому совпадающему аргументу, ..2 ко второму и т.д. Вероятно, вам следует избегать этого неясного соглашения, которое обычно можно выполнить, написав функцию с некоторыми именами обычных аргументов и вызывая он с "...""

Программное обеспечение для анализа данных: программирование на R, John M. Chambers, Springer-Verlag, New York, 2008.
Выдержка со страницы 457.

Ответ 2

..n относится к n-му элементу в ....

Вот немного более простая альтернатива Саймону, избегая eval/parse.

f <- function(...)
{
  message("dots = ")
  print(list(...))   # Notice that you need to convert ...
                     # to a list or otherwise evaluate it
  message("..1 = ")
  print(..1)
  message("..2 = ")
  print(..2)
}

f(runif(5), letters[1:10])
## dots = 
## [[1]]
## [1] 0.94707123 0.09626337 0.41480592 0.83922757 0.94635464
## 
## [[2]]
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
## 
## ..1 = 
## [1] 0.94707123 0.09626337 0.41480592 0.83922757 0.94635464
## ..2 = 
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"

Ответ 3

Принятые ответы имеют смысл.

Но я видел две точки в совершенно ином контексте (т.е. не внутри функции), например: ..prop..:

ggplot(data=diamonds) + 
  geom_bar(
   mapping=aes(x=cut, y=..prop.., group=1) 
  )

Оказывается, ..prop.. - это специальные переменные, созданные преобразованием ggplot stat_count.

stat_count предоставляет две внутренние переменные ..count.. и ..prop.., относящиеся к количеству и доле соответственно. Не удивляйтесь нотации ..name.., она используется для предотвращения путаницы с вашими собственными столбцами (не называйте свои собственные столбцы странными именами, такими как ..count..!)

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