我想创建一个函数,给定一个向量,用偶数报告另一个向量。
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/