我是统计学课程的分级生,并以随机顺序给我一系列的纸质作业.我的部分工作是按字母顺序排列它们.我一直在使用类似于快速排序的方法,但其他评分者使用了不同的方法.我需要一种有效的排序方法,并且有正当理由,因为当我进行"大量"考试时,提供了理由.以下是我使用的一些细节:
到目前为止,我的方法是查找班级名单中间的最后一个字母(即:如果有60篇论文,选择与第30个人相对应的姓氏字母),将其视为一个支点,并将所有字母放在上面一堆中位数,另一堆中的所有字母.如果一个字母与中位数相同,我将它放在中间桩中.我现在对上/下中位数桩做同样的事情.当堆足够小以至于堆栈中只有三个或四个字母时,我为每个字母创建一个堆栈,然后按字母顺序将堆栈折叠成主堆栈.
是否有专门为字母顺序设计的算法,或平均比我的方法更有效的东西?似乎没有问题的一种方法是为每个字母制作一个堆栈(26堆,最坏的情况),但这会消耗很多空间,以至于一个桌面不可行.
我有一个问题,涉及我围绕一些代码包装一个while循环,我认为可以有效地进行矢量化.但是,在每一步中,我的停止条件都依赖于该阶段的值.将此示例视为我的问题的表示模型:使用
生成N(0,1)个随机变量,rnorm()直到您采样大于任意值的值为止k.
编辑:在评论中讨论的我的问题的一个警告是,我不能先验地知道在停止条件之前需要多少样本的近似值.
一种方法:
使用while循环,采样适当大小的正常随机向量(例如,一次rnorm(50)采样50个标准法线,或者rnorm(1)如果k接近零).检查此向量以查看是否有任何观察值大于k.
如果是,请停止并返回所有先前的值.否则,将步骤1中的矢量与通过重复步骤1制作的新矢量组合.
另一种方法是为给定的k指定完全过度杀戮的随机抽取数.这可能意味着如果k = 2,则使用样本1,000个正态随机变量rnorm(1000).
利用的R提供在第二种情况下,给出量化的情况相比环版本,其中矫枉过正数量不太多超过必要更大更快的结果,但在我的问题,我没有对我有多少的运行需要一个很好的直觉要做,所以我需要保守.
问题如下:有没有办法像方法2那样进行高度向量化的过程,但是使用方法1之类的条件检查?rnorm(50)当考虑到高度矢量化的方法是元素元素更快,但更浪费时,是否像"最快"方式那样进行小矢量化操作?
我有一个非常大的数据框,包含790,000行和140个预测变量。其中一些相互之间具有很强的相关性,并且规模不同。有了这个randomForest程序包,我可以只使用一小部分数据在每个核心上生长一个森林,然后使用foreach它们并将其与combine()函数合并以获得一棵大树,如下所示:
rf.STR = foreach(ntree=rep(125, 8), .combine=combine, .multicombine=TRUE, .packages='randomForest') %dopar% {
sample.idx = sample.int( nrow(dat), size=sample.size, replace=TRUE)
randomForest(x=dat[sample.idx,-1, with=FALSE],
y=dat[sample.idx, retention], ntree=ntree)
}
Run Code Online (Sandbox Code Playgroud)
不同尺度上的相关变量使我想使用party软件包中的条件随机森林,但是没有combine()关于森林的方法,因此我不确定如何组合多个森林对象来获得一个重要图或一个预测。
有没有办法在较小的数据子集上训练一个大森林,或者制作几个小森林并将它们组合成一个更大的条件森林模型?
我希望xtable不要覆盖我重复的rowname条目.考虑以下MWE:
> require(xtable)
> foo <- matrix(0, 2,2)
> rownames(foo) = rep("bar", 2)
> foo
[,1] [,2]
bar 0 0
bar 0 0
> xtable(foo)
% latex table generated in R 2.15.0 by xtable 1.7-0 package
% Fri Jun 22 13:59:36 2012
\begin{table}[ht]
\begin{center}
\begin{tabular}{rrr}
\hline
& 1 & 2 \\
\hline
1 & 0.00 & 0.00 \\
2 & 0.00 & 0.00 \\
\hline
\end{tabular}
\end{center}
\end{table}
Warning message:
In data.row.names(row.names, rowsi, i) :
some row.names duplicated: 2 --> …Run Code Online (Sandbox Code Playgroud) 我一直在运行Project Euler,试图编写计算效率高的程序.考虑问题1:http://projecteuler.net/problem=1.我将范围从1000增加到10,000,000,以突出低效率.
这是我的解决方案:
system.time({
x <- 1:1E7
a <- sum(as.numeric(x[x%%3 ==0 | x%%5==0]))
})
user system elapsed
0.980 0.041 1.011
Run Code Online (Sandbox Code Playgroud)
这是朋友写的一些C++代码,用来做同样的事情.
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
long x = 0;
for (int i = 1; i < 10000000; i++)
{
if (i % 3 == 0)
x += i;
else if (i % 5 == 0)
x += i;
}
cout << x;
return 0;
}
cbaden$ time ./a.out
23333331666668 …Run Code Online (Sandbox Code Playgroud)