Есть функция, управляющая фреймом данных, которая в этом случае полезна.
Может производить различные объединения (в терминологии SQL), а декартово произведение - особый случай.
Сначала необходимо преобразовать переменные в фреймы данных, потому что в качестве параметров берется фрейм данных.
так что-то вроде этого будет делать:
A.B=merge(data.frame(A=A), data.frame(B=B),by=NULL);
A.B.C=merge(A.B, data.frame(C=C),by=NULL);
Единственное, о чем нужно заботиться, это то, что строки сортируются не так, как вы изображали.
Вы можете сортировать их вручную по своему желанию.
merge(x, y, by = intersect(names(x), names(y)),
by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
sort = TRUE, suffixes = c(".x",".y"),
incomparables = NULL, ...)
"Если by или оба by.x и by.y имеют длину 0 (нулевой вектор длины или NULL), результат r является декартовым произведением x и y"
см. Этот URL для деталей: http://stat.ethz.ch/R-manual/R-patched/library/base/html/merge.html