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 }