Q:

Sumatoria de cuadrados en R con algebra lineal - Machine Learning

Estoy pasando algunos scripts que tengo de Matlab y Octave a R que sirven para minimizar la diferencia de los cuadrados de una función de costos dada una hipótesis, en relación a los datos observados.
Lo anterior se emplea como parte de algoritmos de aprendizaje supervisado o autónomo.
El intercambio entre los diferentes lenguajes de programación ha ido bien, sin embargo al trabajar con vectores, he notado algo que llamó mucho mi atención y quisiera exponer lo encontrado.

Para simplificar, se tiene un vector x de dimensiones 1x10: (1 fila con 10 columnas) con los valores 1,2,3,4,5,6,7,8,9,10.

Si quisiera obtener la suma de los cuadrados aplicando algebra lineal sería el vector x por (DOT) su transpuesta, eso da 385 la notación en Matlab y Octave sigue la notación que uno esperaría: x*x', dónde x': transpuesta de x.
En R sería muy sencillo hacer x <- 1:10; sum(x*x) y se obtiene 385 de tipo numérico en Matlab y Octave sería muy similar también x = 1:10; sum(x.*x) el punto . indica que es uno a uno la multiplicación y el resultado sigue siendo 385.
R también provee una función t - está en inglés.
Para resumir lo explicado en el enlace previo: el vector x mediante la función t cambiará su dimensión a 10x1, así mismo, la multiplicación de matrices y vectores - está en inglés para R, se emplea el operador %*% entonces al convertir x*x' a:

x %*% t(x) se obtiene una matriz de 10x10. 
t(x) %*% x se obtiene el resultado 385 pero de tipo matriz.
x %*% x se obtiene el resultado 385 pero de tipo matriz.

Las dos últimas expresiones, si bien dan el resultado, al no ser la notación estándar en algebra lineal, esto podría ser una barrera para adaptar modelos u algoritmos existentes.
Asimismo R provee una función drop si el resultado va ser una matriz de 1x1 para que el resultado sea del tipo numérico.

Entonces cuál podría ser una recomendación para trabajar con vectores en R si se va emplear algebra lineal.

NOTA: En el post se menciona las dimensiones del vector x pero sí aplicas en R dim(x) se obtendrá NULL ya que no es una matriz o un array, sólo se habló sobre las dimensiones del vector x para hacer las comparaciones respectivas.

A:

Es un muy buen punto el que planteas, pareciera que el lenguaje es inconsistente  cuando estas dos instrucciones retornan valores totalmente distintos
x %*% t(x)
t(x) %*% x

El problema aquí son dos puntos muy importantes:

x es un vector y t(x) es una matriz
La precedencia de los operandos determina el funcionamiento final

Sin embargo si consultas la documentación del producto matricial, es decir %*%, sobre el final encontrarás:

For matrix crossproducts, crossprod() and tcrossprod() are typically
  preferable

Es decir, lo recomendable es usar crossprod(), vemos su documentación:

Given matrices x and y as arguments, return a matrix cross-product.
  This is formally equivalent to (but usually slightly faster than) the
  call t(x) %% y (crossprod) or x %% t(y) (tcrossprod).

En tu ejemplo sería:
crossprod(x, x)

     [,1]
[1,]  385

Y, de paso, para verificar eso de que crossprod() podría ser algo más rápida que la notación %*%, podemos verificar que efectivamente es así:
f1 <- function() {t(x) %*% x}
f2 <- function() {crossprod(x, x)}
microbenchmark("%*%"=f1(), 
               "crossprod()"=f2(),
               times=1000L)

Unit: microseconds
        expr   min     lq      mean median      uq      max neval
         %*% 8.590 9.3925 14.212453  9.707 10.1960 4049.536  1000
 crossprod() 2.863 3.2820  7.136024  3.631  4.0155 3354.616  1000

