小编Lan*_*ter的帖子

如何在R中更有效地进行拾取和排序?

我有一个矩阵,a包括9列和R中的1600万行.第4列中的每个元素都是"Apple"或"Lion".

我想在第4列中收集那些具有条目"Apple"的行,并将这个"新"矩阵与第一列中的整数条目进行排序.

执行此操作的最佳方法是什么?当然,输出将是.csv文件,因为无法在R中查看此矩阵(1600万行!!).

我尝试了两个代码:

1)在这段代码中,我首先介绍一个b全零的9维向量.然后我运行一个for循环,检查在每一行中a,第四个元素是否为"Apple".如果是这样,那么该行将被添加b,并以此方式b增长.最后我b使用订单功能排序.

b=rep(0,9)
   for(i in 1:nrow(a)){
   if(a[i,4]=="Apple"){
      b=rbind(b,a[i,])
   }
}
b=order(b)
write.table(b,"Apple.csv",sep=",",append=TRUE,col.names=FALSE)
Run Code Online (Sandbox Code Playgroud)

这段代码似乎不起作用,因为只运行for循环需要太长时间!!

2)我运行一个for循环,检查每行的第四个条目是否a为"Apple".如果是这样,它会将该行打印到.csv文件.所以在R中没有创建矩阵.这个.csv文件将在完成后读入R并在将第一列按as.integer函数转换为整数条目后,我使用order函数对表进行排序.

for(i in 1:nrow(a)){
   if(a[i,4]=="Apple"){
      write.table(a[i,],"Apple.csv",sep=",",append=TRUE,col.names=FALSE)
   }
}

a=read.csv("Apple.csv")
a[,1]=as.integer(a[,1])
a=order(a)
Run Code Online (Sandbox Code Playgroud)

这似乎有效,虽然在我的笔记本电脑上非常慢.按照它的速度,for循环显然需要5天才能完成.我不知道我的笔记本电脑是否具有4 GB RAM本质上无法使用如此庞大的数据集.

我可以在哪些方面优化代码?这个程序最有效的代码是什么?如果有人指出我正确的方向,我会很高兴.

sorting for-loop r time-complexity

3
推荐指数
2
解决办法
145
查看次数

找到总和为n的所有m元组

我想找到方程i + j + k + l + m = n的所有非负整数解,其中n是非负整数.也就是说,我想在R中找到关于某个n的所有可能的5元组(i,j,k,l,m).

我写了一段不起作用的代码.我怀疑循环中有什么问题.

为了您的方便,我采取了n = 3,所以我基本上尝试计算所有向量(i,j,k,l,m)的数量为35,矩阵a(35乘5)是矩阵应该显示那些向量.整个事情是在函数"sample(n)"中,如果我把n = 3,即调用样本(3)给我矩阵a.请注意,事先定义了a(35 x 5),所有条目为0.

sample=function(n){
i=0
j=0
k=0
l=0
m=0
for(p in 1:35){
while(i<=3){
while(j<=3){
while(k<=3){
while(l<=3){
m=n-(i+j+k+l)
if(m>-1){
a[p,]=c(i,j,k,l,m)
}
l=l+1}
k=k+1}
j=j+1}
i=i+1}
}
return(a)
}
Run Code Online (Sandbox Code Playgroud)

当我打电话时sample(3),我得到我的原始a即带有所有元素的矩阵0.这段代码出了什么问题?请纠正它.

r

2
推荐指数
1
解决办法
133
查看次数

标签 统计

r ×2

for-loop ×1

sorting ×1

time-complexity ×1