我知道,对于一个列表,使用基本运营商建立索引时,部分匹配完成$和[[.例如:
ll <- list(yy=1)
ll$y
[1] 1
Run Code Online (Sandbox Code Playgroud)
但我仍然是一个R新手,这对我来说是新的,函数参数的部分匹配:
h <- function(xx=2)xx
h(x=2)
[1] 2
Run Code Online (Sandbox Code Playgroud)
我想了解这是如何工作的.它背后的机制是什么?这有副作用吗?我想知道如果给出了xx参数,有人可以测试一下吗?
Andrie评论后编辑:
内部R使用pmatch算法来匹配参数,这里是一个如何工作的示例:
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
Run Code Online (Sandbox Code Playgroud)
但为什么R有这样的功能呢?partial unique匹配背后的基本理念是什么?
我有一个R功能:
myFunc <- function(x, base='') {
}
Run Code Online (Sandbox Code Playgroud)
我现在正在扩展该函数,允许一组任意额外的参数:
myFunc <- function(x, base='', ...) {
}
Run Code Online (Sandbox Code Playgroud)
如何禁用参数的部分参数匹配base?我不能把它放在...之前,base=''因为我想保持函数的向后兼容性(它通常被称为myFunction('somevalue', 'someothervalue')没有base明确命名).
通过调用我的函数来刺激我:
myFunc(x, b='foo')
Run Code Online (Sandbox Code Playgroud)
我希望这意味着base='', b='foo',但R使用部分匹配并假设base='foo'.
是否有一些代码,我可以插入在myFunc确定了传递什么参数名,只匹配确切的 "基地"的base参数,否则在分组它的一部分...?
考虑这个R代码
> l = list(key = 1)
> l$k
[1] 1
> l$ke
[1] 1
> l[['k']]
NULL
> names(l)
[1] "key"
Run Code Online (Sandbox Code Playgroud)
这是否意味着您可以使用$其部分名称访问列表成员?在一次令人沮丧的寻找虫子之后我发现这一点时,我无法相信自己的眼睛.
这是R列表的一个特征吗?它有名字吗?有可能把它关掉吗?当你像Python字典一样使用它时,这会引起明显的麻烦.