我有以下形式的功能:
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<-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<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
将设置s
和d
全局并返回c
a>0
并且 b==0
将s
全局设置并返回c
a>0
并且 b!=0
将只返回 0顺便说一句,调用你的函数a
并给它一个名为a
.
因此,“我可以这样做吗?”的狭隘答案。是“是的,如果你修正你的语法”。广泛的答案是“我不确定你在做什么,你在做什么似乎不太明智。如果你能更清楚地表达你想要做什么的逻辑(即什么是不同输入的期望结果?)然后我们可以帮助您提出体现该逻辑的代码。”
不确定您尝试做什么,但我假设您想要的函数根据变量 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 语句没有问题。
可以有嵌套的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