使我的代码在R中更有效率

时间:2018-04-22 21:55:35

标签: r

我正在尝试执行占用太多时间(> 6天)的代码。也许有一种方法可以提高效率。有什么想法吗?

class Converters {
    companion object {
        @JvmStatic
        @TypeConverter
        fun changesToByteArray(changes: DbChanges): ByteArray {
            ...
        }

        @JvmStatic
        @TypeConverter
        fun byteArrayToChanges(bytes: ByteArray): DbChanges {
            ...
        }
    }
}

1 个答案:

答案 0 :(得分:3)

你可以做很多事情来加快速度。这是一个例子:

library(tidyverse) % adds pipes
ocupados <- function(pruebas) {
  total <- map_int(meses, function(x) {
    with(pruebas, {
      IPF[F_ALTA <= x & F_BAJA >= x] %>%
        n_distinct() #I'm assuming you subtract 1 to remove the NA effect - no longer needed
    })
  })
  names(total) <- meses
  return(total)
}

这里有两个大的加速。首先,内部循环是在编译代码中实现的(所以你在这里看不到它),这将为你节省很多 其次,我们从不定义空向量。每次增加长度时都必须复制那些空载体 - 这非常昂贵。相反,我所保存的只是最终结果。 apply函数系列的行为类似于循环,但在函数中实现代码。

如果您不熟悉管道运算符(%>%),它所做的就是调用下一个函数,并将前一个函数的结果作为下一个参数。所以

length(unique(x))

相同
x %>%
  unique() %>%
  length()

优点是可读性 - 我更容易看到我使用管道应用唯一,然后长度。

还有一条评论 - 没有可重复的示例,我无法测试此代码。如果遇到问题,则需要包含一个可重复的小数据集,以便我们可以实际测试代码的作用。