arrays - 优化 3D 阵列上的函数速度

标签 arrays r performance function optimization

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

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

我想创建一个相同维度的新 3D 数组,其中单元格包含 NA 或包含 1 或 0 的数值向量。因此,我编写了一个名为 Numericize 的函数code> 并使用 aaply 将其应用到整个数组。然而,应用它需要很长时间。

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)
}

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

Final.Daily.Array <- aaply(.data = Complete.Daily.Array,
                           .margins = c(1,2,3),
                           .fun = Numericize,
                           .progress = "text")

我不确定速度问题是否来自低效的 Numericize、低效的 aaply,或者完全是其他原因。我考虑尝试使用 plyr 包设置并行计算,但我不认为这样一个简单的命令需要并行处理。

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

ex.array <- array(dim = c(3,3,3))

ex.array[,,1] <- c("N","A","","1","0","N","A","","1")
ex.array[,,2] <- c("0","N","A","","1","0","N","A","")
ex.array[,,3] <- c("1","0","N","A","","1","0","N","A")

desired.array <- array(dim = c(3,3,3))

desired.array[,,1] <- c(NA,NA,NA,1,0,NA,NA,NA,1)
desired.array[,,2] <- c(0,NA,NA,NA,1,0,NA,NA,NA)
desired.array[,,3] <- c(1,0,NA,NA,NA,1,0,NA,NA)

ex.array
desired.array

有什么建议吗?

最佳答案

您可以使用矢量化方法:

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

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

关于arrays - 优化 3D 阵列上的函数速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46286382/

相关文章:

R:似然比检验比较两个模型,但是缺失数据使得两个模型不在同一维度

c - Berkeley DB 批量功能

unit-testing - 单元测试执行速度(每秒多少测试?)

c# - 将 C# 数组传递给 Javascript

javascript - 使用 ".create"时如何使用 Mongoose 添加到数组中的对象

javascript - jQuery/JavaScript : Using a JavaScript array in jQuery

r - 填充空白行取决于上一个/下一个非空值

删除 R 中的空白行和关联 ID

Javascript 字符串到特殊数组

performance - 无点样式的性能含义