【问题标题】:How can I replicate this loop with apply in R?如何在 R 中使用 apply 复制此循环?
【发布时间】:2020-12-23 21:50:12
【问题描述】:

我最近一直在学习如何用 R 编写代码,所以我对 apply 一点也不熟悉。据我所知,循环在 R 中效率不高,所以我尝试使用 apply 函数,但没有得到任何结果。

这是我的循环:

encoder_output <- function(sequence, vocabulary){
  auxlist <- list()
  for (i in sequence) {
    encoded <- to_categorical(i, num_classes=vocabulary)
    auxlist <- append(auxlist, encoded)
  }
  
  arrOutput <- array(unlist(auxlist),dim =c(nrow(sequence),ncol(sequence),vocabulary))
  
  return(arrOutput)  
}

这是我的申请:

encode_output <- function(sequence, vocabulary){
  auxlist <- list()
  apply(sequence, 1,function(x){
    encoded <- to_categorical(x, num_classes=vocabulary)
    auxlist <- append(auxlist, encoded)
  
  })

  array <- array(unlist(auxlist), dim= c(nrow(sequence),ncol(sequence),vocabulary) )
  return(array)  
}

但是在我的应用函数中,我在 unlist 中遇到错误,因为它说 auxlist 是空的。 我不知道我做错了什么。顺便说一句,序列是一个二维矩阵。我相信这段代码足以解决我的问题,但如有必要,我会用更多代码更新它。 多谢你们! PS:我正在使用 keras 库来用户 to_categorical。

【问题讨论】:

  • 如果您可以添加一个示例数据,我们可以测试我们的代码以及您的代码,这将很有帮助。它还将帮助我们了解您的预期输出。

标签: r keras


【解决方案1】:

啊。这是经典的编码环境问题。 return 函数只会在代码中为您提供结果,但不会显示在您的环境中。所以试试这个:

assign(New_array_Name,array = df,.GlobalEnv)

另一种方法是将其作为输出分配给另一个“外部”变量。在这种情况下,删除return(arrOutput),将其替换为 arrOutput。并且,在控制台或运行代码的任何地方,使用以下行。

variable <- encoder_output(...)

【讨论】:

    猜你喜欢
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    相关资源
    最近更新 更多