相关疑难解决方法(0)

为什么外部工作不像我认为的那样(在R中)?

@ hadley 在今天的答案中引用关于功能文章提示,我决定重新审视一个关于outer函数如何工作(或不工作)的持久性谜题.为什么会失败:

outer(0:5, 0:6, sum) # while outer(0:5, 0:6, "+") succeeds
Run Code Online (Sandbox Code Playgroud)

这显示了我认为outer 应该如何处理如下函数sum:

 Outer <- function(x,y,fun) {
   mat <- matrix(NA, length(x), length(y))
   for (i in seq_along(x)) {
            for (j in seq_along(y)) {mat[i,j] <- fun(x[i],y[j])} }
   mat}

>  Outer(0:5, 0:6, `+`)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    0    1    2    3    4    5    6
[2,]    1    2    3    4    5    6    7
[3,]    2    3    4    5 …
Run Code Online (Sandbox Code Playgroud)

functional-programming r vectorization

23
推荐指数
1
解决办法
2592
查看次数

术语"矢量化"在不同的背景下是否意味着不同的东西?

基于我之前读过的内容,矢量化是一种称为SIMD的并行化形式.它允许处理器同时在阵列上执行相同的指令(例如添加).

然而,在阅读关于Julia和R的矢量化性能的矢量化和非矢量化代码之间的关系时,我感到困惑.该帖子声称,Julia和R开发的Julia代码(通过循环)比矢量化代码更快,因为:

这使一些不熟悉R内部的人感到困惑.因此值得注意的是如何提高R代码的速度.性能改进的过程非常简单:首先从devectorized R代码开始,然后用向量化R代码替换它,然后最终在devectorized C代码中实现这个向量化R代码.遗憾的是,最后一步对于许多R用户是不可见的,因此他们认为向量化本身是提高性能的机制.矢量化本身无助于使代码更快.使R中的矢量化有效的原因在于它提供了一种将计算移动到C中的机制,其中一个隐藏的devectorization层可以发挥其神奇作用.

它声称R将用R编写的矢量化代码转换为C中的devectorized代码.如果矢量化更快(作为一种并行化形式),为什么R会驱动代码,为什么这是一个加号?

r vectorization julia

6
推荐指数
2
解决办法
364
查看次数

如何执行像“%in%”这样的成对操作并为向量列表设置操作

这个问题的动机是如何快速查看 R 中多个向量的任何元素是否相等?,但不相同/重复。

作为一个小例子,假设我们有一个包含 4 个向量的列表:

set.seed(0)
lst <- list(vec1 = sample(1:10, 2, TRUE), vec2 = sample(1:10, 3, TRUE),
            vec3 = sample(1:10, 4, TRUE), vec4 = sample(1:10, 5, TRUE))
Run Code Online (Sandbox Code Playgroud)

我们如何执行成对的二元运算,例如%in%和集合运算intersect,例如union,,setdiff

假设我们要配对"%in%",怎样才能进一步执行any()/ all()/which()每对中?

注意:我不想使用combn().

r

4
推荐指数
1
解决办法
4045
查看次数

标签 统计

r ×3

vectorization ×2

functional-programming ×1

julia ×1