Insegno matematica e programmazione (con R) all'università e sono un grande fan di una notazione buona e coerente. Si prega di dare un'occhiata alle seguenti operazioni vettoriali semplici in R:Operazioni vettoriali incoerenti in R?
> v1 <- c(1,2,3)
> v2 <- c(4,5,6)
> v1 %*% v2
[,1]
[1,] 32
> t(v1) %*% v2
[,1]
[1,] 32
> v1 %*% t(v2)
[,1] [,2] [,3]
[1,] 4 5 6
[2,] 8 10 12
[3,] 12 15 18
> t(v1) %*% t(v2)
Error in t(v1) %*% t(v2) : non-conformable arguments
> v1 + v2
[1] 5 7 9
> v1 + t(v2)
[,1] [,2] [,3]
[1,] 5 7 9
> t(v1) + t(v2)
[,1] [,2] [,3]
[1,] 5 7 9
Penso che ci sono alcune incongruenze qui: o mi manca qualcosa o R sembra essere del tutto arbitraria rispetto a quali risultati si ottiene quando si sia trasporre un vettore o no.
Qual è la logica sottostante qui (che a proposito sembra essere completamente diversa da Matlab).
Perché l'hai taggato con 'Matlab'? – Dan
Sono d'accordo sul fatto che le regole di Matlab siano più coerenti. R cerca di fare cose (promuovere i vettori in matrici di righe o colonne come sembra appropriato, lasciando cadere le dimensioni) che sono convenienti per l'analisi interattiva. Il suo comportamento ** è ** ben definito, come indica la risposta di @ GavinKelly qui sotto, ma ciò non significa che a volte non sia confuso. –