在R中的IF语句中编写嵌套函数

时间:2013-01-01 14:46:45

标签: r

我有以下形式的功能:

a<-function(a,b,c){

if (a<0){ s<<-1;d<<-0; c
}
else { nest<-function(b,c){

if(b=0){ s<<-2; c}
else { 0
}
}

有可能这样做吗?

3 个答案:

答案 0 :(得分:4)

你要做的事情并不是特别清楚。如果a<0则会发生两个全局分配,函数将返回c的值。否则(一旦您将b=0更改为b==0并添加足够的右括号),该函数将无形地返回您定义的函数nest。它不会全局设置s,因为函数nest只是被定义,而不是被调用。

a<-function(a,b,c) {
   if (a<0){ 
      s<<-1;d<<-0; c
   } else { 
     nest<-function(b,c){
       if(b==0){ s<<-2; c} else { 0 }
     }
   }
}

第一种情况:

a(-1,1,1)
## [1] 1
s
## [1] 1
d
## [1] 0

第二种情况:

x <- a(2,1,1)
x
## function(b,c){
##           if(b==0){ s<<-2; c} else { 0 }
##         }
## <environment: 0x998e634>

你的意思似乎更有可能:

a <- function(a,b,c) {
   if (a<0){ 
      s<<-1;d<<-0; c
   } else { 
       if (b==0) { s<<-2; c} else { 0 }
   }
}

哪些

  • 如果a<0全局设置sd并返回c
  • 如果a>0 b==0全局设置s并返回c
  • 如果a>0 b!=0只返回0

顺便说一下,调用你的函数a并给它一个名为a的参数会有点混乱(虽然合法)。

所以答案很简单“我可以这样做吗?”是的,是的,如果你修复你的语法“。广泛的答案是“我不确定你要做什么,你正在做什么似乎不太明智。如果你能表达你想要做的更清楚的逻辑(即什么是不同输入的预期结果?)然后我们可以帮助您提出体现该逻辑的代码。“

答案 1 :(得分:2)

不确定你尝试做什么,但我认为你想要的功能根据变量a,b和c的值做某些事情。您可以使用以下功能执行此操作:

a <- function(a,b,c){
IF(a<0){
# do some stuff
}else{
# do some other stuff
} #close if statement
} #close function statement

换句话说,在函数中使用if语句没有问题。

答案 2 :(得分:2)

可以嵌套if个陈述

e.g。

myfun <- function(x){
                     if(x < 0){
 print("less") }else{
 if(x>7) {
 print("more") }else{
 print("middle")
         }
     }
 }

  myfun(-1)
[1] "less"
> myfun(8)
[1] "more"
 > myfun(6)
[1] "middle"

但是在你的第二部分你说if条件然后命名一个函数,而不是调用函数。显然有选择我不会使用像上面那样的功能,但我们可以做得更好。请记住,减少其中一些内容的有用工具是ifelse