例如,我希望s OR sd OR sigma的参数表示相同的事物。
upper = function(mean, sigma, s, sd) {
s = sd = sigma
value = mean + 2 * sigma
return(value)
}
我希望upper(mean = 0, sd = 1)
和upper(mean = 0, sigma = 1)
给我相同的结果。
答案 0 :(得分:2)
一个选择是保持函数签名不变,然后在内部检查<div class="center">
<file-drop headertext="Drop files here"
(onFileDrop)="dropped($event)">
</file-drop>
</div>
<ng-container *ngIf="files?.length > 0">
<hello *ngFor="let file of files" [file]="file"></hello>
</ng-container>
,sigma
和s
中第一个定义的参数。我们可以在此处使用sd
来解决此问题:
missing
但是总的来说,我想知道为什么您认为您需要此功能。公开一个接口然后期望您的函数以某种方式被调用并没有错。
答案 1 :(得分:1)
您可以匹配参数。即match.arg
以便能够从函数中选择所需的参数:
upper=function(mean,sd,...){
a = match.call()
sd = a[[match.arg(names(a),c("sd","sigma","sig"),several.ok = T)]]
value = mean + 2 * sd
return(value)
}
print(upper(mean=0, sigma=2)) # 4
print(upper(mean=0, s=2)) # 4
print(upper(mean=0, sd=2)) # 4
答案 2 :(得分:0)
这是另一种选择:
fx <- function(x, sigma, ...) {
sigma <- unlist(as.list(match.call())[c('sigma', 's', 'sd')])[1]
return(sigma)
}
c(fx(0, 1),
fx(0, sigma=1),
fx(0, s=2),
fx(0, sd=3),
fx(0, sd=3, s=2),
fx(0, sd=3, s=2, sigma=1),
fx(0, sig=1)
)
# sigma sigma sigma sd sigma sigma sigma
# 1 1 2 3 2 1 1
请注意,“ s =”始终被视为“ sigma =”的缩写,因此可以从函数的第二行中删除,即unlist(as.list(match.call())[ c('sigma','sd')])[1]。
但是,如果同时提供了“ s =“和“ sigma =”,则后者优先(请参见上面的第二个测试)。
还要注意,已命名为“ sigma”,因此,如果需要,该函数可以检查并响应其来源。
仅使用“ fx(0)”,“ sigma”为NULL,可以轻松对其进行测试,并在需要时返回有意义的错误消息。