【发布时间】:2020-03-26 08:09:20
【问题描述】:
我正在开发一个函数,该函数的参数可以采用0:2 中的任意值组合
此参数基于prop.table 函数的“边距”系统,但对其进行了扩展,使其可以采用多个值:0 是单元格,1 是行,2 是列,但 1:2 是行和列0:2 是行、列和单元格。
我想澄清这个符号,以便margin 可以在c("all", "line", "column", "cell", 0, 1, 2) 中取其值,以及向后兼容所需的最后一个值。
这是我使用switch 的尝试(我听说应该避免):
ff = function(x, margin=c("all", "line", "column", "cell", 0, 1, 2)){
if(!is.numeric(margin)){
margin = switch(margin,
all = 0:2,
line = 1,
column = 2,
cell = 0)
if(is.null(margin)) margin=0:2 #defaulting
}
margin
}
ff(NULL, margin=1:2)
ff(NULL, margin="all")
ff(NULL, margin="cell")
ff(NULL, margin=c("column", "cell")) #error in switch (EXPR must be a length 1 vector)
如果边距有一个意外的值,它将默认为 0:2。我宁愿使用match.arg,但我无法让它接受向量。此外,就像现在一样,默认向量将被强制转换为字符。
我也想过用0:2 等替换“全部”,然后使用unlist 和unique,但找不到任何在这里工作的列表替换功能。
【问题讨论】:
标签: r function replace arguments