你如何使用" for"来编写矩阵? R中的循环?

时间:2017-05-01 16:44:04

标签: r for-loop matrix

因此,对于我目前正在进行的数据评估,我想使用" for"来编写矩阵。环。

我们说我有0到100之间的随机数:

E <- runif(100, 0, 100)

t <- 0 #start

for(t in 0:90) {
   D <- length(E[E >= t, E < (t + 10)])
   t = t + 10
}

所以我想做的就是写&#34; D&#34;在每次迭代中使用&#34; t&#34;在一栏中&#34; D&#34;在另一个。

我听说你应该避免使用R中的循环,但我不知道另一种选择。

2 个答案:

答案 0 :(得分:5)

不是使用循环,而是使用sapply执行此操作,cbind对序列中的每个项进行操作并将结果存储在向量中,然后E <- runif(100, 0, 100) t <- seq(0, 90, 10) D <- sapply(t, function(ti) { sum(E >= ti & E < (ti + 10)) }) cbind(t, D) #> t D #> [1,] 0 11 #> [2,] 10 12 #> [3,] 20 14 #> [4,] 30 11 #> [5,] 40 9 #> [6,] 50 12 #> [7,] 60 7 #> [8,] 70 7 #> [9,] 80 6 #> [10,] 90 11 创建矩阵:

sum(E >= ti & E < (ti + 10))

请注意,我还使用length(length(E[E >= ti & E < (ti + 10)]))而不是E作为查找t中大于t + 10但小于public function chartLineAction() { $em = $this->getDoctrine()->getManager(); // $users is not the best name for this result $users = $em->getRepository('MyAppEspritBundle:User')->findNbEmp(); // var_dump($users); $tab = array(); $categories = array(); foreach ($users as $user) { $tab[] = (int)$user['nbEmp'] } // Chart $series = array( array("name" => "Nb employés", "data" => array($tab)) ); $ob = new Highchart(); $ob->chart->renderTo('linechart'); $ob->title->text('Nombre d employés par équipe'); $ob->xAxis->title(array('text' => "Equipe")); $ob->yAxis->title(array('text' => "Nb Employés")); // $ob->xAxis->categories($categories); $ob->series($tab); return $this->render('MyAppEspritBundle:Gerant:AccueilGerant.html.twig', array( 'chart' => $ob )); } 的项目数量的稍微短一些方式function findNbEmp() { $query = $this->getEntityManager() ->createQuery("Select COUNT(distinct u.id) AS nbEmp, u.id_equipe as id_equipe FROM MyAppEspritBundle:User u GROUP BY u.id_equipe"); return $query->getResult(); }

答案 1 :(得分:0)

您似乎希望将变量分类为类别 - 这正是cut所做的:

E <- runif(100, 0, 100)
table(cut(E, breaks = seq(0,100,10), right=FALSE))

#>  [0,10)  [10,20)  [20,30)  [30,40)  [40,50)  [50,60)  [60,70)  [70,80)  [80,90) 
#>      10       10        7       10        8       10       12       11       10 
#>[90,100) 
#>      12 

如果您不想查看类别标签,请移除table电话;如果你想在&#34;表格&#34;格式,将其包装在as.matrix

请注意,如果您是出于绘图目的而进行的,那么histggplot都会自动为您执行此操作:

hist(E, breaks = seq(0,100,10))

hist output

library("ggplot2")
ggplot(data.frame(var=E), aes(x=var)) + geom_histogram(binwidth = 10)

ggplot output