如果我有这样的数据框:
df = data.frame(matrix(rnorm(100), 5000, 100))
Run Code Online (Sandbox Code Playgroud)
我可以使用以下函数来逐行获得三项中位数的每个组合:
median_df = t(apply(df, 1, combn, 3, median))
Run Code Online (Sandbox Code Playgroud)
问题是,此功能需要几个小时才能运行.罪魁祸首是中位数(),运行时间比max()或min()大十倍.
如何加快这个功能,可能是通过编写更快版本的median()或以不同方式处理原始数据?
更新:
如果我运行上面的代码但仅针对df [,1:10]:
median_df = t(apply(df[,1:10], 1, combn, 3, median))
Run Code Online (Sandbox Code Playgroud)
需要29秒
fastMedian_df = t(apply(df[,1:10], 1, combn, 3, fastMedian))
Run Code Online (Sandbox Code Playgroud)
从包ccaPP需要6.5秒
max_df = t(apply(df[,1:10], 1, combn, 3, max))
Run Code Online (Sandbox Code Playgroud)
需要2.5秒
所以我们看到fastMedian()有了显着的改进.我们还能做得更好吗?