使用字符R功能

时间:2014-12-03 16:49:00

标签: r function

我在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会很难看。谢谢

5 个答案:

答案 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)) 
}