小编cha*_*pha的帖子

查找大工作簿中使用命名范围的位置

我有一个工作簿中有594个命名范围的列表,其中有近20页,每个工作表有大约200列数据.我需要找出使用命名范围的位置,以便删除不相关的范围.我将一个命名范围列表粘贴到工作表上,然后我尝试通过记录它们来查找是否在公式中使用它们,然后在所有工作表和列中使用find方法.问题是尽管使用了lookin xlformulas,它检索命名范围,即使它只是一个文本.

这是我的(更新的)尝试(如果它已经不明显,我是一个业余爱好者):

Application.ScreenUpdating = False

Count = ActiveWorkbook.Sheets.Count

Sheets(Count).Activate

Dim locr(1 To 595)
Dim locc(1 To 595)
Dim locn(1 To 595)
Dim nam(1 To 595)

Dim rng As Range

Range("a1").Select

    For X = 1 To 595 'populate array with named ranges
        ActiveCell.Offset(1, 0).Select
        nam(X) = ActiveCell.Value
    Next X


            For i = 1 To 595 'name loop


                For j = 1 To (Count - 1) 'sheet loop


                    Sheets(j).Activate
                    On Error Resume Next
                    Set orange = Sheets(j).Cells.SpecialCells(xlCellTypeFormulas) 'limit range to cells …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba named-ranges

5
推荐指数
2
解决办法
3334
查看次数

需要在20000行中找到每行的等级,应用函数耗时太长

请帮助以下:

# create sequence of numbers
a<-matrix(0:16384,1,16385)
# fill matrix with this same sequence across 20,000 rows
b<-matrix(a,20000,ncol(a),byrow=T)
# find rank of every element, by row
c<-t(apply(b,1, function(x) rank(x, ties.method="first")))
Run Code Online (Sandbox Code Playgroud)

这只是一个样本,b将具有随机序列.

以下是输出的示例:如果b有这个(现在2行乘3列):

1 5 10
2 1 6
Run Code Online (Sandbox Code Playgroud)

我希望这在我的输出中:

1 2 3
2 1 3
Run Code Online (Sandbox Code Playgroud)

处理需要很长时间.请帮忙.

谢谢.

r apply

5
推荐指数
0
解决办法
163
查看次数

提高模拟qbeta值的sapply函数的性能

我用这个sapply函数:

set.seed(1)
data<-matrix(runif(1000000,0,1),1000000,2)

sapply(seq(0.0025, 0.9975, by=0.005), function (x) qbeta(x, data$a, data$b))
Run Code Online (Sandbox Code Playgroud)

由于数据可以有1 mn行,因此可能需要很长时间.a和b是唯一的随机值.

如何提高性能?是从每一行中查找参数需要花费时间,还是只是不可避免?我已经尝试了并行版本,它减少了时间,但它仍然很慢.

一些结果(我在38k行上做了这个):

> system.time(matrix(qbeta(rep(seq(0.0025, 0.9975, by=0.005),each=nrow(data)),data$a, data$b),nrow=nrow(data)))
   user  system elapsed 
  34.53    0.00   34.53 
> system.time(sapply(seq(0.0025, 0.9975, by=0.005), function (x) qbeta(x, data$a, data$b)))
   user  system elapsed 
  34.22    0.00   34.21 
Run Code Online (Sandbox Code Playgroud)

这是我的并行代码:

steps<-seq(0.0025, 0.9975, by=0.005)

qbeta.func <- function(x, data) {
  return(qbeta(x, data$a, data$b) * data$value)
}

cl <- makeCluster(rep("localhost",4), type = "SOCK")
t1 <- Sys.time()
data <- parSapply(cl, steps, qbeta.func, data)#
stopCluster(cl)
#data <- data[1:20,1:20]
Run Code Online (Sandbox Code Playgroud)

performance r sapply

0
推荐指数
1
解决办法
93
查看次数

标签 统计

r ×2

apply ×1

excel ×1

excel-vba ×1

named-ranges ×1

performance ×1

sapply ×1

vba ×1