It seems good practice to avoid arguments without a default value if a preceding argument already has a default value:
# Bad
function(x, y = 1, z) {
# some code
}
# Good
function(x, y = 1, z = 0) {
# some code
}
# Good as well
function(x, z, y = 1) {
# some code
}