我在R中创建了一个函数,我在那里问一个字母(或一个字符串)。以下是第一个函数的示例:
fun.1<-function(a=2,b=3,c=4) return(a+b^2+c^3)
使用第一个函数的另一个函数:
fun.2<-function(letter.to.test="a",a=2,b=3,c=4){
if(letter.to.test=="a") {a=0:10}
else if(letter.to.test=="b"){b=0:10}
else {c=0:10}
return(fun.1(a,b,c))
}
如果没有if else函数,我怎么写fun.2
?在我的真实代码中,我有46个参数需要测试,所以如果不这样做的话,写入46会很难看。谢谢
答案 0 :(得分:1)
更一般的方法:
fun.2 <- function(letter.to.test="a", a=2, b=3, c=4) {
if (letter.to.test %in% letters[1:3]) {
assign(letter.to.test, 1:10)
fun.1(a,b,c)
}
}
答案 1 :(得分:1)
您可以将test
值替换为call
至<-
。然后评估它以更改值。
fun.2 <- function(test = "a", a = 2, b = 3, c = 4) {
eval(call("<-", as.name(substitute(test)), 0:10))
fun.1(a, b, c)
}
fun.2()
# [1] 73 74 75 76 77 78 79 80 81 82 83
答案 2 :(得分:1)
您不需要fun.2
fun.1<-function(a=2,b=3,c=4) return(a+b^2+c^3)
mapply(fun.1, a=1:10, SIMPLIFY = TRUE)
# [1] 74 75 76 77 78 79 80 81 82 83
mapply(fun.1, b=1:10, SIMPLIFY = TRUE)
# [1] 67 70 75 82 91 102 115 130 147 166
答案 3 :(得分:0)
您需要switch
声明。
fun.2<-function(letter.to.test="a",a=2,b=3,c=4){
switch(letter.to.test,
a = {a=0:10},
b = {b=0:10},
c = c=0:10}
)
return(fun.1(a,b,c))
}
答案 4 :(得分:0)
如果您希望将它们全部分配到相同的值(例如,0:10),请尝试:
fun.2<-function(letter.to.test="a",a=2,b=3,c=4){
assign(paste(parse(text = letter.to.test)), 0:10)
return(fun.1(a,b,c))
}