函数参数的部分匹配
我知道,对于列表,使用基本运算符$
和[[
。 例如:
ll <- list(yy=1) ll$y [1] 1
但我仍然是一个R新手,这对我来说是新的,函数参数的部分匹配:
h <- function(xx=2)xx h(x=2) [1] 2
我想了解这是如何工作的。 它背后的机制是什么? 这有没有副作用? 我想了解如何testing是否给出了xx参数?
Andrie评论后编辑:
内部R使用pmatch
algorithm来匹配参数,这里是一个例子,它是如何工作的:
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
但为什么R有这样的特点? partial unique
匹配的基本思想是什么?
存在部分匹配以保存您input长参数名称。 这样做的危险是函数可能会在稍后获得与您的部分匹配相冲突的其他参数。 这意味着它只适合于交互式的使用 – 如果你正在编写的代码将长期存在(例如,进入一个包),那么你应该总是写出完整的参数名称。 另一个问题是,通过缩写参数名称,可以使您的代码不易读。
两个常见的好用途是:
-
len
而不是使用seq
(或seq.int
)函数的seq.int
。 -
all
而不是all.names
与ls
函数。
比较:
seq.int(0, 1, len = 11) seq.int(0, 1, length.out = 11) ls(all = TRUE) ls(all.names = TRUE)
在这两种情况下,代码只是简单地用简短的参数名称来读取,并且这些函数是旧的且足够稳定的,以致于不太可能添加具有冲突名称的另一个参数。
对于保存input的更好的解决scheme是使用自动完成variables和参数名称,而不是使用缩写名称。 R GUI和RStudio支持使用TAB键,而Architect使用CTRL + 空格支持这个。