A purrr
опция
library(purrr)
map_df(transpose(mylist), ~rowMeans(as.data.frame(.x), na.rm = TRUE))
# A tibble: 2 x 2
# x y
# <dbl> <dbl>
#1 2 3.5
#2 3 4
WFM
>>> fstr = 'def f(%s): pass' % (', '.join(['arg%d' % i for i in range(5000)]))
>>> exec(fstr)
>>> f
<function f at 0x829bae4>
Обновление: как Brian заметил, предел находится на стороне вызова:
>>> exec 'f(' + ','.join(str(i) for i in range(5000)) + ')'
Traceback (most recent call last):
File "<pyshell#63>", line 1, in <module>
exec 'f(' + ','.join(str(i) for i in range(5000)) + ')'
File "<string>", line 1
SyntaxError: more than 255 arguments (<string>, line 1)
с другой стороны, это работает:
>>> f(*range(5000))
>>>
Заключение: нет, это не относится к развернутым аргументам.
для ** kwargs, Если я помню хорошо, это - словарь. Это поэтому не имеет ни о каких пределах.
для *args, я не так уверен, но я думаю, что это - кортеж или список, таким образом, это также не имеет ни о каких пределах.
Никакими пределами я имею в виду кроме, возможно, предела памяти.
Это, кажется, ограничение в компиляции источника, так будет, вероятно, существовать только для аргументов, передаваемых непосредственно, не в *args или ** kwargs.
Соответствующие нормы могут быть найдены в ast.c:
if (nargs + nkeywords + ngens > 255) {
ast_error(n, "more than 255 arguments");
return NULL;
}
Но обратите внимание, что это находится в ast_for_call, и поэтому только applys стороне вызова. т.е. f(a,b,c,d,e...)
, вместо определения, хотя это будет считать обоих позиционными (a,b,c,d)
и keyword (a=1, b=2, c=3)
параметры стиля. Фактический *args
и **kwargs
параметры похожи, они должны только рассчитать как один аргумент в пользу этих целей на стороне вызова.
Я попробовал за список 4 000 объектов, и он работал. Таким образом, я предполагаю, что это будет работать на большие значения также.