I think there is a misunderstanding as to what sweep does; please take a look at the post How to use the sweep function for some great examples.
The bottom line is that you need both a summary statistic (of a suitable dimension, see below) and a mathematical operation according to which you "sweep" that summary statistic from your input matrix.
In your case, the summary statistic is a vector of length length(ak) = 3. You can therefore sweep ak from a using the mathematical operation defined in FUN; how we sweep depends on MARGIN; since a is a 3x3 matrix, we can sweep ak from a either column-wise or row-wise.
In case of the former
sweep(a, 2, ak, FUN = "+")
# [,1] [,2] [,3]
#[1,] 101 204 307
#[2,] 102 205 308
#[3,] 103 206 309
and in case of the latter
sweep(a, 1, ak, FUN = "+")
# [,1] [,2] [,3]
#[1,] 101 104 107
#[2,] 202 205 208
#[3,] 303 306 309
Here we are column/row-wise sweeping by adding (FUN = "+") ak to a.
Obviously you can define your own function. For example, if we want to column-wise add ak to the squared values of a we can use sweep in the following way
sweep(a, 2, ak, FUN = function(x, y) x^2 + y)
# [,1] [,2] [,3]
#[1,] 101 216 349
#[2,] 104 225 364
#[3,] 109 236 381
The first function argument x refers to the selected vector of a (here a column vector because MARGIN = 2); the second function argument y refers to the vector ak.
It is important to ensure that dimensions "match"; for example, if we do
a <- a <- matrix(1:9,3)
ak <- c(100, 200)
sweep(a, 2, ak, FUN = "+")
we get the warning
Warning message:
In sweep(a, 2, ak, FUN = "+") :
STATS does not recycle exactly across MARGIN
as we are trying to add ak to a column-wise, but a has 3 columns and ak only 2 entries.