R映射函数运行缓慢

R映射函数运行缓慢,r,memory,data.table,memory-efficient,mapply,R,Memory,Data.table,Memory Efficient,Mapply,我正在为一系列多项选择题考试计算项目统计数据。我已经有了一个使用mapply的解决方案,在技术上是可行的,但是计算一个更复杂的统计数据需要几个小时。我拥有的第一个数据集是一个包含每个学生在每次评估中回答的每个问题的单独一行的数据集 df <- data.frame(c(rep("s1", 5), rep("s2", 5), rep("s3", 5),rep("s4", 5)),"a1", c("i1", "i2", "i3", "i4", "i5"), c(1, 0), 1) colna

我正在为一系列多项选择题考试计算项目统计数据。我已经有了一个使用mapply的解决方案,在技术上是可行的,但是计算一个更复杂的统计数据需要几个小时。我拥有的第一个数据集是一个包含每个学生在每次评估中回答的每个问题的单独一行的数据集

df <- data.frame(c(rep("s1", 5), rep("s2", 5), rep("s3", 5),rep("s4", 5)),"a1", c("i1", "i2", "i3", "i4", "i5"), c(1, 0), 1)

colnames(df) <- c("student", "assessment", "item", "score", "points.possible")
df当您执行

scores <- aggregate(score ~ student, data=subsetdf,sum)/aggregate(points.possible ~ student, data=subsetdf, sum)  
因此,当您将二者分开时,
's1'/'s1'
的结果不是数字,并抛出警告

  • 无需创建
    正确
    错误
    。将该列的值作为指示器,告诉您该学生是对还是错
  • 相反,请执行以下操作:

    scores <- aggregate(subsetdf[,c('score', 'points.possible')], by = list(subsetdf$student), sum)
    names(scores) <- c('student', 'score','points.possible')
    scores$avg.score <- scores$score/scores$points.possible
    

    得分思路:(1)不要将整个
    df
    子集,使用
    suba这对你来说是否正确?我在
    mapply
    中收到警告<代码>聚合
    很可能是您的主要瓶颈,然后是所有的子集。我会换成dplyr@rawr你刚才是说。。。(我引用“我会切换到dplyr”?@r2evans我一直在谷歌搜索data.table。“我以前没用过,但也许我会试一试。”罗尔接得好,完全忘了这一点。你让我担心了一会儿。
    unique$r <- mapply(fun1, unique$assessment, unique$item)
    
    scores <- aggregate(score ~ student, data=subsetdf,sum)/aggregate(points.possible ~ student, data=subsetdf, sum)  
    
    > aggregate(score ~ student, data=subsetdf,sum)
          student score
    1      s1     3
    2      s2     2
    3      s3     3
    4      s4     2
    
    scores <- aggregate(subsetdf[,c('score', 'points.possible')], by = list(subsetdf$student), sum)
    names(scores) <- c('student', 'score','points.possible')
    scores$avg.score <- scores$score/scores$points.possible