R Plyr包中的变量前的点号的目的是什么?

17

在 R Plyr 包中,变量前的点号有什么作用?

例如,在 R 帮助文件中:

ddply(.data, .variables, .fun = NULL, ...,
    .progress = "none", .drop = TRUE, .parallel = FALSE)
任何帮助将不胜感激。

5
我不知道,但它们总是让我感到恼火,因为你无法对任何函数参数使用制表符自动完成。 - Joshua Ulrich
1
当它出现时,我犹豫是否使用它,因为我认为这些点之间有一些神奇的东西正在发生。 - Dieter Menne
1
你可以亲自看到这个魔法:library(plyr); . ; ?"."。同时,值得一提的是,不妨看看 Hadley 的 as.quoted 魔法以及这里的讨论 here - Justin
1
@hadley: 因为所有的函数参数都匹配了“.”,所以ddply(<tab><tab>)会得到ddply(.);再次按下<tab><tab>则会建议基础隐藏内容中的所有内容。 - Joshua Ulrich
@JoshuaUlrich -- 通过制表符补全,您是指键入ddply(<TAB><TAB>以获取ddply的形式列表吗?还是指键入ddply(.da<TAB><TAB>以获取此完成:ddply(.data=?对于我来说,后者在Windows上(GUI和Emacs)都可以正常工作。前者效果不太好... - Josh O'Brien
显示剩余5条评论
2个回答

13
可能有两件事情让您感到困惑。
其一是'plyr'包中的.函数。该函数允许您将变量用作链接,而不是引用变量包含的值。例如,在某些函数中,我们希望引用对象x,而不是x中存储的值。在'base'包中,没有简单、简洁的方法来实现这一点,因此我们使用'plyr'包来表示.(x)。'plyr'函数本身经常这样使用:
ddply(data, .(row_1), summarize, total=sum(row_1))
如果我们没有使用 . 函数,'ddply'会抱怨,因为'row_1'包含许多值,而我们真正想要的是引用对象。
这里另一个"."的作用是将其用作函数参数名称中的字符。我不确定它的起源是什么,但很多人似乎只是为了突出哪些变量是函数参数,哪些变量仅是函数内部代码的一部分而这样做。在这种情况下,"."只是另一个字符。

在你的第一次解释中,使用传统的计算机科学术语可能更为恰当,比如“引用传递”而不是“值传递”。 - Micah Henning

6

来自http://www.jstatsoft.org/v40/i01

请注意所有参数都以"."开头。这可以避免与处理函数的参数名称冲突,并有助于在控制重复的参数和控制单个步骤的参数之间进行视觉分隔。基本R中的某些函数使用全大写字母参数名称进行此操作,但我认为这种方法更易于输入和阅读。


1
我更喜欢在参数名称末尾加上一个点,比如 warning - Joshua Ulrich
@JoshuaUlrich ...或者就像在prcomp中一样! - joran
@JoshuaUlrich 这是早期版本使用的方法,但由于部分匹配的原因它并不起作用。 - hadley
@hadley:真不幸。那加一个下划线呢?这似乎更符合你的风格。 :) - Joshua Ulrich
@JoshuaUlrich,一个下划线后缀与一个点后缀一样存在部分匹配的问题。一个前导下划线会报错。 - GSee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接