r - 在 R 中的向量中选择偶数的函数

标签 r function for-loop

我想创建一个函数,给定一个向量,用偶数报告另一个向量。

evens <- function(x){
  vector <- c()
  for (i in 1:length(x)){
    if (i %% 2 == 0){
      vector[i] <- vector[i] + i
    }
  }
  vector
}

但这给 NULL对于 x 中的数字。

有人知道缺少什么吗?
谢谢

最佳答案

我认为你可以简化这个并加快它的速度:

evens <- function(x) subset(x, x %% 2 == 0)
evens(1:10)
#> [1]  2  4  6  8 10

使用 lapply可能不是一个好主意,因为它实际上在引擎盖下使用循环。最好坚持使用 R 的原生矢量化,正如您从以下基准测试中看到的:
evens1 <- function(some_array) some_array[lapply(some_array, "%%", 2) == 0]
microbenchmark::microbenchmark(evens1(1:10000), evens(1:10000))
#> Unit: microseconds
#>             expr      min       lq      mean   median       uq       max neval cld
#>  evens1(1:10000) 5694.309 5883.195 6359.1855 6039.232 6306.992 14811.840   100   b
#>   evens(1:10000)  757.942  770.944  788.6802  785.317  799.346   912.267   100  a 

关于r - 在 R 中的向量中选择偶数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61484767/

相关文章:

c - 如何在C中将字符附加到字符串数组

R将数字转换为时间

r - Shinyjs:[添加|删除]类在模块中不起作用

r - 如何将数据帧的列转换为数值向量

php - php函数默认返回什么?

c - C 中不兼容的指针类型。 C 数组和指针

c - 在 C 中使用嵌套函数

r - Leaflet colorQuantile 'breaks' 不是唯一的

php - 执行 PHP 循环直到数组结束或达到一定的迭代次数?

R - 使用双括号和单括号在 for 循环中对数据帧进行子集化