Hola Leandro:
En este caso ambas expresiones dan exactamente lo mismo. Veamos
> set.seed(1)
> x <- runif(5,max=10)
> sum(x)
[1] 23.20376
> sum(x[x<5])
[1] 8.393145
> sum(x*(x<5))
[1] 8.393145
El resultado de evaluar x < 5 es un vector de valores lógicos TRUE o FASE según el correspondiente elemento sea o no menor que 5
> x<5
[1] TRUE TRUE FALSE FALSE TRUE
Cuando se utiliza un vector lógico como subíndice de un vector obtenemos los valores correspondientes a las posiciones TRUE
> x[x<5]
[1] 2.655087 3.721239 2.016819
En este caso es un vector con tres elementos, que son los que se están sumando.
La operación * aplicada a dos vectores en R calcula un vector cuyos elementos son el producto de los elementos correspondientes de los vectores, si uno de los vectores es lógico, TRUE equivale al valor 1 y FALSE a 0, por tanto en este caso se obtiene un vector de 5 elementos, dos de los cuales son 0, y se suma.
> x*(x<5)
[1] 2.655087 3.721239 0.000000 0.000000 2.016819
En esta operación se hacen 5 productos y 4 sumas, en la anterior se hicieron 3 sumas, si bien en el primer caso habría que sumar el tiempo necesario para el acceso selectivo a los elementos del vector. Sospecho que la primera forma es más rápida.
Un saludo.