小编Flo*_*ian的帖子

比较R中的两个列表

我有两个ID列表.

我想比较两个列表,特别是我对以下数据感兴趣:

  • 列表A和B中有多少个ID
  • A中有多少个ID,但B中没有
  • B中有多少个ID,但A中没有

我也想画一个维恩图.

r venn-diagram

54
推荐指数
3
解决办法
7万
查看次数

R optim():使用父环境时出现意外行为

考虑在父环境中fn()存储最新输入x及其返回值的函数ret <- x^2

makeFn <- function(){
    xx <- ret <- NA
    fn <- function(x){
       if(!is.na(xx) && x==xx){
           cat("x=", xx, ", ret=", ret, " (memory)", fill=TRUE, sep="")
           return(ret)
       }
       xx <<- x; ret <<- sum(x^2)
       cat("x=", xx, ", ret=", ret, " (calculate)", fill=TRUE, sep="")
       ret
    }
    fn
}
fn <- makeFn()
Run Code Online (Sandbox Code Playgroud)

fn()仅在提供其他输入值时才进行计算。否则,它将ret从父环境中读取。

fn(2)
# x=2, ret=4 (calculate)
# [1] 4
fn(3)
# x=3, ret=9 (calculate)
# [1] 9
fn(3)
# x=3, ret=9 …
Run Code Online (Sandbox Code Playgroud)

optimization r mathematical-optimization nonlinear-optimization

11
推荐指数
1
解决办法
178
查看次数

结合R中的列表

什么是一种简单快捷的方法:

x <- list(a1=2, b1=c(1,2), c1=1:3)
y <- list(a2=5, b2=c(2,5), c2=2:4)
Run Code Online (Sandbox Code Playgroud)

list(list(x$a1, y$a2), list(x$b1, y$b2), list(x$c1, y$c2))
Run Code Online (Sandbox Code Playgroud)

或者一般来说:

如果列表x和y具有相同的长度并且它们的元素的长度也相应,那么如何将它组合成单个列表,如上所示?

r list lapply data-structures mclapply

7
推荐指数
1
解决办法
7230
查看次数

每次我想在 R 中使用 foreach() 时,是否都必须注册DoParallel() 和 stopCluster() ?

我读到您必须stopCluster()在运行并行函数后使用:foreach()在 R 中。但是,我可以逃脱registerDoParallel(),然后运行foreach()任意多次,而无需使用stopCluster()。那我到底需要stopCluster()还是不需要?

不使用是否stopCluster()意味着您的核心正在忙于当前的任务?因此,如果我使用并行编程,中间只执行一点点单核顺序任务,那么我就不需要这样做stopCluster()?据我所知,设置并行也会产生大量的开销时间消耗。

parallel-processing r doparallel

7
推荐指数
1
解决办法
6942
查看次数

当矩阵的值很小时,为什么矩阵乘积会变慢?

我创建两个矩阵AB相同的尺寸。A包含比更大的值B。矩阵乘法的A %*% A速度大约是的10倍B %*% B

为什么是这样?

## disable openMP
library(RhpcBLASctl); blas_set_num_threads(1); omp_set_num_threads(1)

A <- exp(-as.matrix(dist(expand.grid(1:60, 1:60))))
summary(c(A))
#     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
# 0.000000 0.000000 0.000000 0.001738 0.000000 1.000000 

B <- exp(-as.matrix(dist(expand.grid(1:60, 1:60)))*10)
summary(c(B))
#      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
# 0.0000000 0.0000000 0.0000000 0.0002778 0.0000000 1.0000000 

identical(dim(A), dim(B))
## [1] TRUE

system.time(A %*% A)
#    user  system elapsed 
#   2.387 …
Run Code Online (Sandbox Code Playgroud)

r matrix openblas

7
推荐指数
1
解决办法
154
查看次数

R 并行中止所有 mclapply 操作

如果在任何一个进程中parallel::mclapply()遇到错误(例如, a ) ,是否可以请求尽快放弃所有进一步的处理?stop()

parallel-processing r mclapply

6
推荐指数
1
解决办法
5433
查看次数

求解 R 中的线性方程组

我不知道如何在以下情况下进行,因为最后一个方程没有所有 4 个变量。所以使用了等式下面的代码,但这是错误的......有谁知道如何进行?

方程:

3a + 4b - 5c + d = 10

2a + 2b + 2c - d = 5

a -b + 5c - 5d = 7

5a + d = 4
Run Code Online (Sandbox Code Playgroud)

代码:

 X <- matrix(c(3,4,-5,1,2,2,2,-1,1,-1,5,-5,5,0,0,1), 4, 4)
 y <- matrix(c(10,5,7,4), 4, 1)
 solve(X)%*%y #equivalent to solve(X, y)
Run Code Online (Sandbox Code Playgroud)

r matrix

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

理解R中optim()的maxit参数

在接下来的调用中,optim()我期待一次评估fn()和一次评估gr(),因为maxit=1.然而,fn()gr()被评价的各7倍.

optim(par=1000, fn=function(x) x^2, gr=function(x) 2*x,
      method="L-BFGS-B", control=list(maxit=1))$counts
function gradient 
       7        7 
Run Code Online (Sandbox Code Playgroud)

为什么是这样?这是一个错误吗?或者为什么要optim()对一次迭代进行7次评估?


更详细的输出:

optim(par=1000,
      fn=function(x) { cat("f(", x, ")", sep="", fill=TRUE); x^2 },
      gr=function(x) { cat("g(", x, ")", sep="", fill=TRUE); 2*x },
      method="L-BFGS-B", control=list(maxit=1))$counts
f(1000)
g(1000)
f(999)
g(999)
f(995)
g(995)
f(979)
g(979)
f(915)
g(915)
f(659)
g(659)
f(1.136868e-13)
g(1.136868e-13)
function gradient 
       7        7 
Run Code Online (Sandbox Code Playgroud)

(经R版3.5.0测试.)

optimization r mathematical-optimization

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

R:测试函数从封闭环境中获取哪些对象

定义R函数时,有时会想不到它依赖于封闭环境中的对象。就像是:

a <- 1
fn <- function(x) x + a
Run Code Online (Sandbox Code Playgroud)

如果这是无意发生的,则可能导致难以调试的问题。

有没有简单的方法可以测试是否fn使用封闭环境中的对象?

就像是:

test(fn=fn, args=list(x=1))
## --> uses 'a' from enclosing environment
Run Code Online (Sandbox Code Playgroud)

testing debugging environment r function

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

R中线性系统的迭代求解器的典型用例是什么?

我想知道迭代求解器是否是求解线性系统(非稀疏,对称,正定)的更快方法。

我试图从R软件包共轭梯度法RlinsolvecPCG,但两者似乎比非迭代是不很精确和更慢base::solve()

library(Rlinsolve)
library(cPCG)
library(microbenchmark)

n <- 2000
A <- tcrossprod(matrix(rnorm(n^2),nrow=n) + diag(rep(10,n)))
x <- rnorm(n)
b <- A%*%x

mean(abs(x - solve(A,b)))
## [1] 1.158205e-08
mean(abs(x - lsolve.cg(A,b)$x))
## [1] 0.03836865
mean(abs(x - cgsolve(A,b)))
## [1] 0.02642611
mean(abs(x - pcgsolve(A,b)))
## [1] 0.02638013

microbenchmark(solve(A, b), lsolve.cg(A, b),
               cgsolve(A, b), pcgsolve(A, b), times=5)
## Unit: milliseconds
##            expr       min        lq      mean    median         uq       max neval  cld
##     solve(A, b)  183.3039  188.6678  189.7362  188.8665   189.8514  197.9914 …
Run Code Online (Sandbox Code Playgroud)

performance r numerical-methods

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

R矩阵的矩阵,奇怪的行为

这是R中的错误还是有意义的?

## works
aa <- matrix(nrow=1,ncol=2)
dimnames(aa)[[2]] <- c("a","b")
dimnames(aa)[[1]] <- c("c")

## does not work
bb <- matrix(nrow=1,ncol=2)
dimnames(bb)[[1]] <- c("c")
Error in dimnames(bb)[[1]] <- c("c") : 'dimnames' must be a list
Run Code Online (Sandbox Code Playgroud)

谢谢你的解释!

r

3
推荐指数
1
解决办法
4267
查看次数