-3

我有以下形式的功能:

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
}
}

有可能这样做吗?

4

3 回答 3

4

目前还不清楚您要做什么。如果a<0然后两个全局分配将发生并且函数将返回 的值c。否则(一旦更改b=0b==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 }
   }
}

哪一个

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

顺便说一句,调用你的函数a并给它一个名为a.

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

于 2013-01-01T15:06:01.830 回答
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 语句没有问题。

于 2013-01-01T14:52:20.137 回答
2

可以有嵌套的if语句,

例如

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

于 2013-01-01T14:57:17.827 回答