कैसे पता चलेगा कि एक वेक्टर समान तत्वों से बना है?


12

अगर एक वेक्टर में सभी समान तत्व हैं तो मैं कैसे जांच सकता हूं?

उदाहरण के लिए मान लें कि मेरे पास है:

vec1 = rep(10,20)
vec2 = seq(1:20)

मैं कैसे दिखा सकता हूं कि vec1सभी समान तत्व हैं?


diff(vec1)क्या लौटा?
रुई बरदास

1
या एक uniqueतत्व
कच्ची

1
@rawr कोड के रूप में उत्तरlength(unique(vec1)) == 1
GWD

जवाबों:


12

एक विकल्प है diff

diff(vec1)

यदि तत्व समान हैं, तो उनका अंतर शून्य है।

all(diff(vec1) == 0)
#[1] TRUE

या वेक्टर की उसके पहले तत्व से तुलना करें।

all(vec1 == vec1[1])
#[1] TRUE

संपादित करें।

यदि वेक्टर के सभी तत्व समान हैं, तो यह निर्धारित करने के कई तरीके आरएचर्टेल , यूरी सरायकिन , टीएमएफएमके देखते हैं । यहाँ तुलनात्मक परीक्षण हैं।

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()

यहाँ छवि विवरण दर्ज करें


7

विचरण का प्रयोग करें। यदि वेक्टर के सभी तत्व समान हैं, तो विचरण शून्य है:

allElementsEqual <- function(x) {!var(x)}

#allElementsEqual(vec1)
#[1] TRUE
#allElementsEqual(vec2)
#[1] FALSE


2

हम n_distinctसे उपयोग कर सकते हैंdplyr

library(dplyr)
n_distinct(vec1)

1

आप इसे एक कारक में बदल सकते हैं और स्तर प्राप्त कर सकते हैं जो केवल 1 मान होना चाहिए यदि वे सभी समान हैं।

vec1 <- (10,20)

vec <- factor(vec1)

levels(vec)

1

आप मानक विचलन की गणना भी कर सकते हैं और मूल्यांकन कर सकते हैं कि क्या यह शून्य है:

sd(vec1) == 0

[1] TRUE

या उपयोग कर रहा है table():

length(table(vec1)) == 1

या उपयोग कर रहा है rle():

length(rle(vec1)$lengths) == 1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.