2012-04-29 2 views
0

У меня есть вектор y, который представляет собой ряд положительных целых чисел. Для каждого значения в y, я хочу, чтобы вычислить:Вычислить функцию в двух разных частях

  • z <- 1/y,
  • но для элементов, которые y 1 Мне нужно установить z равен нулю.
  • Наконец мне нужен вектор z с нуля для y является 1 и 1/y для y не 1.

Как я могу это сделать?

+0

Извините, мой вопрос слишком упрощен. Скажем, y является матрицей с целыми числами. Рассчитайте z <-1/y и установите z нуль, если y равно нулю. Я попытался использовать ifelse, но получил ошибку: NaNs – zca0

ответ

2

Это очень легко сделать с логической индексацией:

z <- 1/y # will have some Inf values but not throw an error 
z[y==0] <- 0 # changes the Inf's to 0 
4

Использование ifelse и сделать это в одном шаге:

y <- 1:5 
z <- ifelse(y==1, 0, 1/y) 

cbind(y, z) 
    y   z 
[1,] 1 0.0000000 
[2,] 2 0.5000000 
[3,] 3 0.3333333 
[4,] 4 0.2500000 
[5,] 5 0.2000000 
1

Расширение, что Andrie сказал в матрицу ...

y <- matrix(1:25, ncol=5) # define the matrix y 
z <- matrix(ifelse(y==1, 0, 1/y), ncol=ncol(y)) 

или я мог бы просто сказать

z <- matrix(ifelse(y==1, 0, 1/y), ncol=5) 
Смежные вопросы