Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R代码变慢了_R_Performance - Fatal编程技术网

R代码变慢了

R代码变慢了,r,performance,R,Performance,我对R中的时间执行有问题,我做了以下操作来确定是否对类别重复了某些内容,并且对所有类别都有唯一的标识符。因此,数据如下所示: CAT IDCAT COUNTR IDUNIQUE categ1 fffss 1 1 categ2 ffaab 2 2 categ3 fffss 3 1 categ1 ffaab 4 2 categ3 mmmaa

我对R中的时间执行有问题,我做了以下操作来确定是否对类别重复了某些内容,并且对所有类别都有唯一的标识符。因此,数据如下所示:

CAT       IDCAT     COUNTR    IDUNIQUE
categ1    fffss     1         1
categ2    ffaab     2         2
categ3    fffss     3         1
categ1    ffaab     4         2
categ3    mmmaa     5         5
categ2    aaamm     6         6
categ3    ffaab     7         2
我使用的代码是:

for(i in 1:nrow(Table)){
  Table$IDUNIQUE[Table$IDCAT[i]==Table$IDCAT]<-min(Table$COUNTR[Table$IDCAT[i]==Table$IDCAT])
}
for(1中的i:nrow(表)){

Table$IDUNIQUE[Table$IDCAT[i]==Table$IDCAT]我相信您要做的是,为
COUNTR
列的每一级
IDCAT
找到最小值,并从中创建一列。函数
ave
执行以下操作:

> with(Table, ave(COUNTR, IDCAT, FUN=min))
[1] 1 2 1 2 5 6 2
将此任务分配给
表$IDUNIQUE
,以完成工作


这在复杂性上并不比您现有的低,但这项工作主要是在C代码中完成的,而不是在R中循环。

因此,您正在尝试查找并标记重复列
IDCAT
CAT
中的值的行。您的性能问题是由于显式索引。如果您在functional m中使用矢量化操作再进一步,使用
dplyr
数据中的库和方法。table
甚至会进一步加速数据争论。请尝试写下规则,以确定行是唯一的。用这些信息编辑您的帖子。正如@Drey所说,向量是您的朋友e、 我也在想,你可能可以将帧标记为一个向量op,但我也从表中读到,如果它们具有相同的
IDCAT
,那么你实际上只是将一行标记为
IDUNIQUE
,我试着用dplyr函数来解决问题,但我没有实现解决问题,我不知道是否有人能解决这个问题如果你已经解决了这样的问题,如果你有明确的答案来回答我的问题,我会很有帮助的。