小编Jam*_*s B的帖子

查找值第一次有效显示在列表中

我正在尝试解决一个问题,其中有一个长长的列表,每个索引处都有数量不定的数字。目的是说每个数字出现的最早索引是什么。因此,如果15在列表中的索引45和78处出现,那么我应该返回15在48处的第一个位置。在最初的问题中,它继续使用长度为10,000的列表,因此快速执行此操作很有帮助。

最初,我尝试使用现有的列表结构,并做了类似的事情,它在10,000行时非常慢。

set.seed(1)
x <- replicate(100, sample(100, sample(10, 1)))
cbind(value = 1:100,
      index = sapply(1:100, function(i) which.max(sapply(x, function(x) i %in% x))))
Run Code Online (Sandbox Code Playgroud)

最终,我尝试将数据转换为data.table,效果更好,但是我一直想知道是否有更好的方法来解决问题。就像默认列表结构本质上效率低下一样,还是有更好的方法可以使用它?

set.seed(1)
x <- replicate(100, sample(100, sample(10, 1)))
dt <- data.table(index = rep(1:100, sapply(x, length)), value = unlist(x))
dt[,.(index = first(index)),value][order(value)]
Run Code Online (Sandbox Code Playgroud)

如果有帮助,这里是原始问题的完整数据集。

library(RcppAlgos)
library(memoise)
library(data.table)

jgo <- function(n) {
  if (isPrimeRcpp(n) | n == 1) return (n)
  div <- divisorsRcpp(n)
  div <- div[-c(1, length(div))]
  div <- Map(function(a, b) c(a, b), div, rev(div))
  div2 <- lapply(div, function(x) lapply(jgo(x[1]), c, x[2])) …
Run Code Online (Sandbox Code Playgroud)

r

5
推荐指数
1
解决办法
101
查看次数

标签 统计

r ×1