What's the interpretation of `lm( y ~ x*z)`? My intuitive understanding is that if $x$ and $z$ are categorical factors, then each observation $y_i$ is given a mean value which is equal to the mean value given to $y_j$ if $y_i$ and $y_j$ belong to the same $(x,z)$ product group. 
However, when I run the command in R and look at the model matrix, the parametrisation is clearly not the same. R seems to give each observation a mean value equal to a sum of a bunch of parameters. Why? What does it mean? 
My only clue right now is that R maybe considers $x$ and $z$ to be numerical predictors, and thus the parametrisation is a regression?
 A: I'm not sure I understand the question completely, so I'll try to debug and answer any potential problems in order.
Are you actually working with factors?
First things first: Have you made sure that X and Z actually enter the model as factors?
Use a built-in R command to make sure that the variables are not interpreted by R as integers or other numeric format.
Understanding how R interprets the input
Now assuming that X and Z are factors:
Let's say that X is a factor related to gender, and Z is a factor related to vocation. Let's pretend that $X = \{male, female\}$ and $Z = \{Carpenter, Personal Assistant, Data Scientist\} $.
Let's also say that Y is the annual income per person in the data set. Then you're trying to predict the annual income based on gender and vocation.
When specifying a model in R, the syntax X*Z means: $X + Z + X:Z$.
So you're looking at the effect of gender ($X$), the effect of vocation($Z$), and the effect of specific gender within a specific vocation($X:Z$).
Let's pretend that men and woman earn the same (to within your chosen level of significance) except that male carpenters earn more than female carpenters.
The p-values for all parameters would then be above your chosen threshold (meaning there is no added effect on income from the factor), except for the one interaction male:carpenter, which would be significant, with a positive parameter value.
That was (roughly) the $X*Z$ model.
What if you did the $X+Z$ model?
Then you get parameters for genders and you get parameters for vocation. But no interaction.
Finally you could model $X:Z$ and get only the interactions.
Why are some parameters missing from the output
You need to know why some parameters will appear to be 'missing' from the output of the call to lm. This is due to the way factors enter the design matrix; if you have an intercept (first column is all ones), then you can't also have a column of 1's where the test subject is male, while you also have a column of 1's where the test subject is Female, since the design matrix would become ill-posed (due to rank-deficiency). Therefore the design matrix can only have a column of all 1's (the intercept) and a column where the test subject if Female. These two columns in the design matrix then gives you two parameters: the intercept and the added effect of being female. The effect of Male is included in the intercept.
You should look into Helmert, Sum-coding, and Treatment-coding to see how factors can be included in the design matrix. Doing a few hand calculations on small systems gives a nice idea of how to implement and interpret factors in a linear model.
So if you we're looking at $y\text{~} x$ then you'd get an output with an intercept and a single parameter value that would say something like:
genderFemale, but you won't see genderMale in the output.
The reason for this is that you can't find an intercept, an added effect from Male, and an added effect from Female at the same time. But you can find an intercept and an added effect from Female.
Sums of a bunch of Parameters
Factors enter models as sums of 'added effects' because you can only ask whether a test subject is Male/Female or Carpenter/Personal Assistant/Data Scientist. You're asking an either/or question of the test subject, not 'how much'. Either/Or questions can only predict a very specific amount of variation in your output. 
Think of this: if you asked someone if their primary vocation is carpenter and the person said: Yeah, at about 0.3.
Then you'd definitely consider the answer nonsense. You can't 'scale' factors. A factor is a yes/no thing.
If you asked the same test subject how many hours he/she worked as a carpenter per week and you got an answer in hours, then you'd get a slope on the annual income because a number makes sense in this regard. 
