2017-07-29 12 views
0

でアレイ上の文では、私は以下の機能を持って検討している場合:私の問題を述べるの簡単な方法でR

> ff<-function(a){ if (a>0){ return ("positive") } else{ return("negative") } } 

> ff(-1) 
[1] "negative" 
> ff(1) 
[1] "positive" 

配列を使用するときながら:

> print(ff(c(-1,1))) 
[1] "negative" "negative" 
Warning message: 
In if (a > 0) { : 
    the condition has length > 1 and only the first element will be used 

私は予想していました

print(ff(c(-1,1)))=("negative" "positive") 

これをどのように解決すればよいですか?

答えて

0

ます。またsymnumまたはcutを使用することができます。適切なカットポイントを定義するだけです。

symnum(elements, c(-Inf, 0, Inf), c("negative", "positive")) 
negative positive positive negative 

cut(elements, c(-Inf, 0, Inf), c("negative", "positive")) 
[1] negative positive positive negative 
Levels: negative positive 

注:オリオール・mirosaの答えからelementsベクトルを使用:脇エキサイティングとして

elements <- c(-1, 1, 1, -1) 

symnumは同様の行列で動作します:

# convert elements vector to a matrix 
elementsMat <- matrix(elements, 2, 2) 
symnum(elementsMat, c(-Inf, 0, Inf), c("negative", "positive")) 

[1,] negative positive 
[2,] positive negative 
4

あなたの関数はベクトル化されていないので、期待通りに機能しません。あなたはベクトル化され、代わりにifelseを使用する必要があります。

代わり
elements <- c(-1, 1, 1, -1) 

ff <- function(a) { 
    ifelse(a > 0, 'Positive', 'Negative') 
} 

ff(elements) 

[1] "Negative" "Positive" "Positive" "Negative" 
1

more reliable behaviorためdplyr機能をチェックしてください。

a <- c(-1, 1, 1, -1) 

if_else(a < 0, "negative", "positive", "missing") 

与える:

[1] "negative" "positive" "positive" "negative"