Все в порядке в вашей функции. Вы, кажется, потерялись с позиционными переменными и аргументами ключевых слов.
Позвольте мне объяснить: позиционные аргументы, a
и b
в вашем случае, являются обязательными (и могут иметь значения по умолчанию). Другие аргументы необязательны. Если вы хотите сделать аргумент обязательным или иметь значение по умолчанию, поставьте его перед * args и ** kwargs. Но помните, что вы не можете предоставить аргумент дважды:
def x(a = 1, b = 2, *args, **kwargs):
print a, b, args, kwargs
>>> x(3, 4, 5, b=6)
TypeError: x() got multiple values for keyword argument 'b'
Есть другой способ, но не настолько удобочитаемый, иметь значения по умолчанию для аргументов и не иметь позиционных аргументов:
def x(*args, **kwargs):
kwargs.updae({'a': 1, 'b': 2})
Ваша функция, которая анализирует аргументы, в порядке, хотя я не понимаю, почему вы пишете varargs
и keywords
в _
. Он передает аргументы прозрачно:
def x(a = 1, b = 2, *args, **kwargs):
print a, b, args, kwargs
def y(*args, **kwargs):
x(*args, **kwargs)
>>> y(3, 4, 5, 6)
3 4 (5, 6) {}
>>> y(3, 4, 5, b=6)
TypeError: x() got multiple values for keyword argument 'b'
Преобразуйте вашу переменную в коэффициент
и установите категории, которые вы хотите включить в результат, используя уровни
. Значения с нулевым счетчиком также появятся в результате:
y <- c(0, 0, 1, 3, 4, 4)
table(factor(y, levels = 0:5))
# 0 1 2 3 4 5
# 2 1 0 1 2 0