Jeremy Clarkson has been forced to apologise after calling Gordon Brown a "one-eyed Scottish idiot".