两个点," .."在R

时间:2013-11-15 09:05:52

标签: r

这可能是一个蹩脚的问题,但无论如何。在RStudio中,我只是注意到键入一个数字,......和另一个数字会将字符的语法高亮显示从海军蓝变为淡蓝色以及...之后的数字。

例如,这是一个具有这种独特颜色的数字:

4..4

部分“..4”呈浅蓝色。

我使用的是默认语法着色。我尝试在解释器中引入这样的常量,但我只得到错误“错误:”4..5“中的意外数字常量,并且带有”两个点“或...的查询似乎不是非常友好的谷歌。 / p>

有谁知道“..”的用法是什么,如果有的话?

3 个答案:

答案 0 :(得分:27)

..4将是R解析器中的保留字。在?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

现在您知道它是什么,您如何使用它?由John Chambers提供;

  

“名称..1引用第一个匹配的参数,..2引用第二个,等等。您应该避免这种模糊的约定,通常可以通过编写一个函数来完成一些普通的参数名称,并使用"..."

调用它      

数据分析软件:使用R 进行编程,John M. Chambers,Springer-Verlag,纽约,2008年。
  摘录自第457页。

答案 1 :(得分:11)

..n是指...中的第n个元素。

这是一个稍微简单的替代Simon的答案,避免使用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"

答案 2 :(得分:2)

接受的答案很有意义。

但是我在完全不同的上下文中看到了两个点(即不在函数内部),就像这样:..prop..

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

结果是..prop..special variables created by ggplot's stat_count transformation

  

stat_count提供了两个内部变量..count....prop..,分别引用计数和比例。不要为..name..表示惊讶,它是用来防止与您自己的列混淆(不要使用..count..之类的奇怪名称来命名自己的列!)

(请记住variable names in R can include periods。我来自Python背景,所以这个双周期看起来像Python的双下划线约定:__prop__,是一种用于mark special / "private" variables / "name mangle" those variables的技术)