优化3D阵列上的功能速度

时间:2017-09-18 18:58:26

标签: arrays r performance function optimization

我将用户定义的函数应用于3D数组的各个单元格。每个单元格的内容是以下可能性之一,由于先前的格式化,所有这些都是字符向量:

"N"
"A"
""
"1"
"0"

我想创建一个相同维度的新3D数组,其中单元格包含NA或包含1或0的数字向量。因此,我编写了一个名为Numericize的函数并使用了{{ 1}}将它应用于整个数组。但是,应用它需要永远。

aaply

尺寸原始数组为480x866x366。该函数需要使用以下代码永久应用:

Numericize <- function(x){
  if(!is.na(x)){
    x[x=="N"] <- NA; x
    x[x=="A"] <- NA; x
    x[x==""] <- NA; x
    x <- as.integer(x)
  }
  return(x)
}

我不确定速度问题是来自效率低下的Final.Daily.Array <- aaply(.data = Complete.Daily.Array, .margins = c(1,2,3), .fun = Numericize, .progress = "text") ,效率低下的Numericize还是完全不同的。我考虑过尝试使用aaply包设置并行计算,但我不认为这么简单的命令需要并行处理。

一方面我担心我为自己创建了一个堆栈溢出(请参阅this了解更多信息),但我已将其他函数应用于类似的数组而没有问题。

plyr

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用矢量化方法:

ex.array[ex.array %in% c("", "N", "A")] <- NA
storage.mode(ex.array) <- "integer"

你可以简单地使用第二行,它将通过强制引入NA。