我正在尝试使绘图函数具有一组默认值,并通过使用 foreach (var item in result)) {
MessageBox.Show($"{item.date} and {item.id}");
}
函数在点(plot
)参数内部接受的任何参数来灵活地更改这些值。一个例子:
...
错误自然是因为我试图两次将asp参数传递到PlotIt <- function(x, y, ...) {
plot(x, y, type = "l", asp = 1, ...)
}
x <- 1:10
y <- 10:1
PlotIt(x = x, y = y)
# Returns a plot
PlotIt(x = x, y = y, asp = NA)
# Error in plot.default(x, y, type = "l", asp = 1, ...) :
# formal argument "asp" matched by multiple actual arguments
中。到目前为止,我最笨拙的尝试是做出一个if-else语句来考虑到这一点(方法是从here修改而来):
plot
要对可以使用PlotIt2 <- function(x, y, ...) {
mc <- match.call(expand.dots = FALSE)
if(names(mc$...) %in% "asp") {
plot(x, y, type = "l", ...)
} else {
plot(x, y, type = "l", asp = 1, ...)
}
}
PlotIt2(x = x, y = y, asp = NA)
# works
参数设置的所有可能参数执行此操作,我需要编写一个长的if-else语句。 是否有更优雅的方法?
问题与this one有关,不同之处在于我想自动覆盖...
参数设置的所有参数。
答案 0 :(得分:1)
如果您只想使用基数R,
您可以将所有内容放在列表中,并根据参数名称删除重复项
(确保默认设置为最后设置,以便在@SerializedName("status")
@Expose
private String status;
@SerializedName("totalResults")
@Expose
private Integer totalResults;
@SerializedName("articles")
@Expose
private List<Article> articles = null;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Integer getTotalResults() {
return totalResults;
}
public void setTotalResults(Integer totalResults) {
this.totalResults = totalResults;
}
public List<Article> getArticles() {
return articles;
}
public void setArticles(List<Article> articles) {
this.articles = articles;
}
}
中包含默认设置时将其删除):
...
如果您不介意依靠rlang
,
您还可以执行以下操作,
使用PlotIt <- function(x, y, ...) {
arguments <- list(
x = x,
y = y,
...,
type = "l",
asp = 1
)
arguments <- arguments[!duplicated(names(arguments))]
do.call("plot", arguments)
}
获得相同的功能
(并检查坐标轴的图标签,
基本R版本和.homonyms
版本之间会有所不同):
rlang