为什么R使用部分匹配?
我知道,对于列表,使用基本运算符为什么R使用部分匹配?,r,semantics,R,Semantics,我知道,对于列表,使用基本运算符$和[[编制索引时会进行部分匹配。例如: ll <- list(yy=1) ll$y [1] 1 但是为什么R有这样的功能呢?部分唯一匹配背后的基本思想是什么?部分匹配的存在是为了避免您键入长参数名称。它的危险在于,函数以后可能会获得与部分匹配冲突的额外参数。这意味着它只适合交互式使用-如果您编写的代码会持续很长时间(例如,放入包中),那么您应该始终编写完整的参数名。另一个问题是,通过缩写参数名,您可以降低代码的可读性 两种常见的良好用途是: len而不是
$
和[[
编制索引时会进行部分匹配。例如:
ll <- list(yy=1)
ll$y
[1] 1
但是为什么R有这样的功能呢?
部分唯一
匹配背后的基本思想是什么?部分匹配的存在是为了避免您键入长参数名称。它的危险在于,函数以后可能会获得与部分匹配冲突的额外参数。这意味着它只适合交互式使用-如果您编写的代码会持续很长时间(例如,放入包中),那么您应该始终编写完整的参数名。另一个问题是,通过缩写参数名,您可以降低代码的可读性
两种常见的良好用途是:
len
而不是length.out
,具有(或seq.int
)功能all
而不是带有该函数的all.names
seq.int(0, 1, len = 11)
seq.int(0, 1, length.out = 11)
ls(all = TRUE)
ls(all.names = TRUE)
在这两种情况下,代码与缩短的参数名称一样容易阅读,并且函数足够古老和稳定,因此不太可能添加另一个名称冲突的参数
节省键入时间的更好解决方案是使用变量名和参数名的自动补全,而不是使用缩写名。R GUI和RStudio支持使用TAB键,而Architect支持使用CTRL+Space。Read@Andrie感谢您的链接!即使它没有解释R为什么有此功能,我也会接受它作为答案。It看起来像是其他功能的副作用,因为有多个部分匹配是错误的。下面是对“原因”的猜测。R被设计为一种命令行统计语言。一种快速简便的数据分析方法。部分匹配使命令行分析更容易(但编程更麻烦)。使用
[[
默认情况下不会作为参数exact=TRUE
执行部分匹配。我甚至在ls
中使用a=T
。有时,如果您知道arg名称,您就可以不必担心此设计决策的一般性意见。/facepalm了解部分匹配参数名称的功能,这可能会导致调试问题原因。1.如果cbb要输入长参数名称,那么一开始就不要将它们命名为长参数?2.tab autocompletion FTW!5年后评论:FWIW我很确定R的早期版本没有进行tab autocompletion。而S(我认为这项功能的基础)几乎肯定没有。
pmatch("me", c("mean", "median", "mode")) # error multiple partial matches
[1] NA
> pmatch("mo", c("mean", "median", "mode")) # mo match mode match here
[1] 3
seq.int(0, 1, len = 11)
seq.int(0, 1, length.out = 11)
ls(all = TRUE)
ls(all.names = TRUE)