You could use model-based clustering; e.g. mclust (Manual) is a contributed R package for model-based clustering, classification, and density estimation based on finite normal mixture modeling. It provides functions for parameter estimation via the EM algorithm for normal mixture models with a variety of covariance structures.
## create example data set
set.seed(1)
library("MASS")
x <- rbind(mvrnorm(150, c(50,50), 35*diag(c(1, 1))),
mvrnorm(150, c(70,70), 20*matrix(c(1, 0.8, 0.8, 1), 2, 2)))
plot(V2 ~ V1, data=x, col=group)

library("mclust")
res <- Mclust(x[, 1:2])
res
##'Mclust' model object:
## best model: ellipsoidal, varying volume, shape, and orientation (VVV) with 2 components
summary(res)
## ----------------------------------------------------
## Gaussian finite mixture model fitted by EM algorithm
## ----------------------------------------------------
##
## Mclust VVV (ellipsoidal, varying volume, shape, and orientation) model with 2 components:
##
## log.likelihood n df BIC ICL
## -1953 300 11 -3968 -3973
##
## Clustering table:
## 1 2
## 152 148
##
plot(res, what="classification")
