【发布时间】:2015-11-22 10:04:34
【问题描述】:
作为我在 R 中的程序的一部分,我必须将大量的句子与一些函数进行比较(这里显示的一个是比较具有相同单词数的句子,以及是否只有一个不同的单词在这两句话之间)
为了让事情变得更快,我已经将所有单词转换为整数,所以我正在处理整数向量,所以示例函数是一个非常简单的函数
is_sub_num <- function(a,b){sum(!(a==b))==1}
其中 a,b 是字符向量,例如
a = c(1,2,3); b=c(1,4,3)
is_sub_num(a,b)
# [1] TRUE
我的数据将存储在data.table
Classes ‘data.table’ and 'data.frame': 100 obs. of 2 variables:
$ ID: int 1 2 3 4 5 6 7 8 9 10 ...
$ V2:List of 100
..$ : int 4 4 3 4
..$ : int 1 2 3 1
每个条目的长度可能不同(在下面的示例中,条目的大小都是 4)
我有一个包含候选对 ID 的表,用于测试 DT 中的相应条目,上面的函数如下
is_pair_ok <- function(pair){
is_sub_num(DT[ID==pair[1],V2][[1]],DT[ID==pair[2],V2][[1]])}
这是我想要做的事情的简化:
set.seed=234
z = lapply(1:100, function(x) sample(1:4,size=4,replace=TRUE))
is_sub_num <- function(a,b){sum(!(a==b))==1}
is_pair_ok <- function(pair){
is_sub_num(DT[ID==pair[1],V2][[1]],DT[ID==pair[2],V2][[1]])}
pair_list <- as.data.table(cbind(sample(1:100,10000,replace=TRUE),sample(1:100,10000,replace=TRUE)))
DT <- as.data.table(1:100)
DT$V2 <- z
colnames(DT) <- c("ID","V2")
print(system.time(tmp <-apply(pair_list,1,is_pair_ok)))
这在我的笔记本电脑上大约需要 22 秒,尽管它只有 10,000 个条目并且功能非常基本。
你对如何加快代码速度有什么建议吗???
【问题讨论】:
-
apply实际上转换为matrix。 -
整个问题是不可重现的,并且不包含所需的输出。我怀疑有人能用这么少的有用信息帮助你——尤其是在星期天。
-
好吧,伙计们,我正在努力尝试制作一个可重现的示例。它需要一些时间来处理它。感谢您的 cmets
-
@DavidArenburg 我更新了帖子
标签: r optimization data.table lapply