来自其他各种语言,我发现 R 功能强大且直观,但我对它的性能并不感到兴奋。所以我决定尝试改进我编写的一些代码片段,并学习如何更好地在 R 中编写代码。
这是我写的一个函数,试图确定一个向量是否是二进制值(两个不同的值或只有一个值):
isBinaryVector <- function(v) {
if (length(v) == 0) {
return (c(0, 1))
}
a <- v[1]
b <- a
lapply(v, function(x) { if (x != a && x != b) {if (a != b) { return (c()) } else { b = x }}})
if (a < b) {
return (c(a, b))
} else {
return (c(b, a))
}
}
编辑:这个函数应该查看一个向量,然后c()
如果它不是二进制值则返回,c(a, b)
如果是,则返回,a 是较小的值,b 是较大的值(如果 a == b 则只是c(a, a)
。例如,对于
A B C
1 1 1 0
2 2 2 0
3 3 1 0
我会这样做lapply
并isBinaryVector
得到:
$A
[1] 1 1
$B
[1] 1 1
$C
[1] 0 0
在中等大小的数据集(大约 1800 * 3500,其中 2/3 是二进制值)上花费的时间大约是 15 秒。该集合仅包含浮点数。
无论如何我可以更快地做到这一点吗?
感谢您的任何投入!