カルロ:
ベクトルはすべて同じ要素を持っているかどうかはどのように確認できますか?
たとえばのは、私が持っているとしましょう:
vec1 = rep(10,20)
vec2 = seq(1:20)
どのように私はそれを表示することができvec1
、すべて同じ要素を持っていますか?
ルイBarradas:
オプションがありますdiff
。
diff(vec1)
要素が等しい場合、その差はゼロです。
all(diff(vec1) == 0)
#[1] TRUE
またはその最初の要素へのベクトルを比較します。
all(vec1 == vec1[1])
#[1] TRUE
編集。
ベクトルのすべての要素が等しいかどうかを決定するいくつかの方法を参照して、投稿したRHertel、ユーリーSaraykin、tmfmnkを。ここでは比較試験です。
library(microbenchmark)
library(ggplot2)
f <- function(n){
x <- rep(10, n)
mb <- microbenchmark(
var = var(x) == 0,
sd = sd(x) == 0,
diff = all(diff(x) == 0),
extract = all(x == x[1]),
unique = length(unique(x)) == 1
)
mb
}
sizes <- c(10, 100, seq(1e3, 1e4, by = 1e3))
mb_list <- lapply(sizes, f)
names(mb_list) <- sizes
res <- lapply(seq_along(mb_list), function(i){
agg <- aggregate(time ~ expr, mb_list[[i]], median)
agg$size <- sizes[i]
agg
})
res <- do.call(rbind, res)
ggplot(res, aes(size, time, colour = expr)) +
geom_point() +
geom_line()