2017-10-08 129 views
0

我试图创建一个函数,它依赖于x的值,返回两个函数之一。当我创建以下函数时,出现错误,我不知道为什么。在IF语句中意外的'<='R

t <- c(0.1,0.9,1.5) 

squeze <- function(x){ 
if(t[1]<x<=t[2]){ 
    exp(a1*x+b1) 
} else { 
    exp(a2*x+b2) 
} 
} 

错误消息:

Error: unexpected '<=' in: 
"squeze <- function(x){ 
if(t[1]<x<=" 
> exp(a1*x+b1) 
Error: object 'x' not found 
> } else { 
Error: unexpected '}' in " }" 
> exp(a2*x+b2) 
Error: object 'x' not found 
> } 
Error: unexpected '}' in " }" 
> } 
Error: unexpected '}' in "}" 

我会非常感激,如果有人能指出什么我已经错过了。

提前,谢谢!

+3

每个不等式都是一个测试,并返回T或F.要组合2个测试,必须使用'&'或'|'。所以你可以做't [1] Gregor

+0

非常感谢你@Gregor! –

回答

2

解析器不喜欢它,这就是为什么你会得到一个错误。

而且这是一件好事,因为它可能有麻烦已经得到了你,请参阅:

(1 < 3) < 2 # TRUE 

1 < 3TRUE然后TRUE被胁迫1,并且1<2TRUE

在该R >是功能

`>` # function (e1, e2) .Primitive(">")  
`>`(1,2) # FALSE  

在此立GHT你就会明白为什么你试过没有意义的R.

什么

而是使用if(t[1] < x & x <= t[2])

如果排除这两个界限,你可以使用data.table::between

between(x, t[1], t[2],F) 

如果包括边界您可以使用data.table::betweendplyr::between

between(x, t[1], t[2]) 

data.table还允许语法x %between% c(t[1], t[2])

+0

谢谢您的全面解答@Moody_mudskipper! 在某种程度上,这与格里高尔写的一样,但是这个答案有点更加详细和解释性。 –