Две точки, ".." в R
Это может быть хромой вопрос, но в любом случае. В RStudio я просто заметил, что набрав номер,..., а другой номер изменит подсветку синтаксиса символов от синего до голубого для... и цифр после него.
В качестве примера это число, имеющее этот отличительный цвет:
4..4
Часть "..4" имеет синий цвет ребенка.
Я использую раскраску синтаксиса по умолчанию. Я попробовал в интерпретаторе ввести такую константу, но я получил ошибку "Ошибка: неожиданная числовая константа в" 4..5 ", а запросы с" двумя точками "или.., похоже, не очень дружелюбны к Google.
Кто-нибудь знает, что такое использование "..", если есть?
Ответы
Ответ 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__
, метод, используемый для пометки специального /" частные "переменные/" имя искажения "эти переменные)