【发布时间】:2018-10-25 07:59:05
【问题描述】:
我需要创建一个函数,它接受两个整数 x 和 N,其中 N > x 并返回一个维度为 N 的向量,除了组件 x 外,它的向量全为零,其中它有一个1。
我设法通过以下方式做到了,
Function=function(x,N){
vec=rep(0,N)
r=as.integer(x)
vec[r]=1
return(vec)
}
但是当我需要迭代过程并将其应用于大量实现时,速度非常慢。另一方面,我的一个朋友可以用一个 python 函数(我认为是“OneHotEncoder”)来做同样的事情,而且速度非常快。
我想知道 R 中是否有适合此目的的函数。
【问题讨论】:
-
问题可能在于你如何将此函数应用于更大的案例,而不是函数本身。
-
不定义自定义函数,可以
library(magrittr); integer(N) %>% `[<-`(x, 1L) -
您可以使用已经可用的优化方法之一,而不是编写自己的 one-hot 编码器,例如
model.matrix(或Matrix::sparse.model.matrix,如果您的数据非常大)。如果你在 R 标签中搜索“one hot encoding”或“dummy variables”,你会发现很多例子。
标签: r one-hot-encoding