我有以下形式的功能:
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
}
}
有可能这样做吗?
答案 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
全局设置s
和d
并返回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