Skip to main content
Ramin Khavarzadeh Data, signals, interpretation — and what may come next
Ramin Khavarzadeh · · 34 min read

تمرین سوم درس R - تابع () seq

تمرین سوم درس R - تابع () seq

Table of contents

    مائده فرج زاده

    تمرین سوم درس R

    (seq(1,5

    تابع seq() برای ایجاد یک سری که در آن اعداد به میزان خاصی کم یا زیاد می شوند می توان از این تابع استفاه کرد

    برای مثال

    Examples

    (seq(0, 1, length.out = 11

    [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

    seq(stats::rnorm(20)) # effectively 'along'

    [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

    'seq(1, 9, by = 2)     # matches 'end

    [1] 1 3 5 7 9

    'seq(1, 9, by = pi)    # stays below 'end

    [1] 1.000000 4.141593 7.283185

    (seq(1, 6, by = 3

     1 4[1]

    (seq(1.575, 5.125, by = 0.05

    [1] 1.575 1.625 1.675 1.725 1.775 1.825 1.875 1.925 1.975 2.025 2.075 2.125 2.175 2.225

    [15] 2.275 2.325 2.375 2.425 2.475 2.525 2.575 2.625 2.675 2.725 2.775 2.825 2.875 2.925

    [29] 2.975 3.025 3.075 3.125 3.175 3.225 3.275 3.325 3.375 3.425 3.475 3.525 3.575 3.625

    [43] 3.675 3.725 3.775 3.825 3.875 3.925 3.975 4.025 4.075 4.125 4.175 4.225 4.275 4.325

    [57] 4.375 4.425 4.475 4.525 4.575 4.625 4.675 4.725 4.775 4.825 4.875 4.925 4.975 5.025

    [71] 5.075 5.125

    seq(17) # same as 1:17, or even better seq_len(17)

    [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17

     که وقتی length.out=11 قرار داده یعنی 11عدد با فاصله مساوی بین عدد 0 تا 1 ایجاد کند.این طول شامل اعداد و علامت اعشار می باشد .

    وقتی by=2قرار داده است .

    یعنی اعداد 1تا 9 با فاصله 2 واحد از یکدیگر قرار بگیرند.

    seq(1,5,by=0.5)

    در اینجا یعنی اعداد 1 تا 5 با فاصله 5/0 واحد از یکدیگر قرار بگیرند.

    seq(1,5,length=7)

    در اینجا یعنی 7 عدد با فاصله مساوی بین عدد 1 تا 5 ایجاد کند.

    rep(5,4)

    [1] 5 5 5 5

    تابع rep() یعنی اعداد یا حروف خاصی را به صورت یک سری به دفعات مشخص تکرار کند از این تابع استفاده می کنیم . که در اینجا عدد 5 برای 4 بار تکرار شده است . همچنین شما می توانید برای بررسی بیشتر روش حداکثر درست نمایی به مقاله مربوط به این موضوع مراجعه کنید.

    برای مثال

    Examples

    rep(1:4, 2)[1] 1 2 3 4 1 2 3 4rep(1:4, each = 2)       # not the same.[1] 1 1 2 2 3 3 4 4rep(1:4, c(2,2,2,2))     # same as second.[1] 1 1 2 2 3 3 4 4rep(1:4, c(2,1,2,1))[1] 1 1 2 3 3 4rep(1:4, each = 2, len = 4)    # first 4 only.[1] 1 1 2 2rep(1:4, each = 2, len = 10)   # 8 integers plus two recycled 1's.[1] 1 1 2 2 3 3 4 4 1 1rep(1:4, each = 2, times = 3)  # length 24, 3 complete replications[1] 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4rep(1, 40*(1-.8)) # length 7 on most platforms[1] 1 1 1 1 1 1 1rep(1, 40*(1-.8)+1e-7) # better[1] 1 1 1 1 1 1 1 1## replicate a listfred <- list(happy = 1:10, name = "squash")rep(fred, 5) # date-time objectsx <- .leap.seconds[1:3]rep(x, 2)rep(as.POSIXlt(x), rep(2, 3)) ## named factorx <- factor(LETTERS[1:4]); names(x) <- letters[1:4]xa b c d A B C D Levels: A B C Drep(x, 2)a b c d a b c d A B C D A B C D Levels: A B C Drep(x, each = 2)a a b b c c d d A A B B C C D D Levels: A B C Drep.int(x, 2)  # no names[1] A B C D A B C DLevels: A B C Drep_len(x, 10)

    rep(1:5,each=2)

    [1] 1 1 2 2 3 3 4 4 5 5

    در اینجا خواسته شده که اعداد 1 تا 5 را 2بار تکرار شود.

    rep(c("a","b","c"),2)

    [1] "a" "b" "c" "a" "b" "c"

    در اینجا سری از حرف های a,b,c 2بار تکرار شده اند .

    c(1,3,4,rep(3,4),seq(1,6,by=2))

    [1] 1 3 4 3 3 3 3 1 3 5

    در این مثال سری ایجاد شده با تابع rep() و seq() ایجاد شده است که می گوید 3را 4ار تکرار کند و 2 عدد با فاصله مساوی بین عدد 1 تا 6 ایجاد کند .

    x<-c(4,1,8,9,3)

    در اینجا ما یک بردار ایجاد کرده ایم

    y<-x[c(2,4)]

    y

    [1]  2 NA

    y یک زیر بردار است که شامل شماره های 2 و 4 از بردار x است

    y<-x[-c(1,3,4)]

    در اینجا عناصری که نمی خواهیم گفته شود را با قرار دادن علامت منفی در پشت شماره  آنها حذف می کنیم  که در اینجا بردار y یک زیر بردار شامل عناصر x به استثنای عناصر شماره 1و3و4 است.

    is.na(c(1,NA))

    [1] FALSE  TRUE

    تابع is.na() ارزش هر عنصری را از نظر گم شده بودن مشخص می کند .که در اینجا کلمه TRUE نشان می دهد که عنصر دوم بردار و NA مقادیر گم شده است .

    برای مثال

    Examples

    is.na(c(1, NA))        #> FALSE  TRUE

    is.na(paste(c(1, NA))) #> FALSE FALSE

    (xx <- c(0:4))

    is.na(xx) <- c(2, 4)

    xx                     #> 0 NA  2 NA  4

    anyNA(xx) # TRUE

    # Some logical operations do not return NA

    c(TRUE, FALSE) & NA

    c(TRUE, FALSE) | NA

    ## Measure speed difference in a favourable case:

    ## the difference depends on the platform, on most ca 3x.

    x <- 1:10000; x[5000] <- NaN  # coerces x to be double

    if(require("microbenchmark")) { # does not work reliably on all platforms

      print(microbenchmark(any(is.na(x)), anyNA(x)))

    } else {

      nSim <- 2^13

      print(rbind(is.na = system.time(replicate(nSim, any(is.na(x)))),

                  anyNA = system.time(replicate(nSim, anyNA(x)))))

    }

    ## anyNA() can work recursively with list()s:

    LL <- list(1:5, c(NA, 5:8), c("A","NA"), c("a", NA_character_))

    L2 <- LL[c(1,3)]

    sapply(LL, anyNA); c(anyNA(LL), anyNA(LL, TRUE))

    sapply(L2, anyNA); c(anyNA(L2), anyNA(L2, TRUE))

    ## ... lists, and hence data frames, too:

    dN <- dd <- USJudgeRatings; dN[3,6] <- NA

    anyNA(dd) # FALSE

    anyNA(dN) # TRUE

     

    x<-c(1:3,NA)

    n<-is.na(x)

    n

    [1] FALSE FALSE FALSE  TRUE

    any(is.na(x))

    [1] TRUE

    تابع any(is.na)  می پرسد که آیا بردار دارای هیچ دده ی گمشده ی NA هست یا نه؟

    برای مثال

    Examples

    range(x <- sort(round(stats::rnorm(10) - 1.2, 1)))

    if(any(x < 0)) cat("x contains negative values\n")

     

    z<-c(12,9,NA,34,45)

    order(z)

    [1] 2 1 4 5 3

    تابع order() با استفاده از این تابع می توان داده های گمشده NA را به آخر سری منتقل کرد

    order.z<-z[order(z)]

    order.z

    [1]  9 12 34 45 NA

    sort(z)

    [1]  9 12 34 45

    mean(z,na.rm=T) #delete missing

    [1] 25

    mean(z[!is.na(z)])

    [1] 25

    در اینجا نشان می دهد که تابعmean() چگونه با داده های گمشده رفتار می کند برای گرفتن میانگین یک سری عددی با استفاده از تابع mean() مقادیر NA را با برهان (na.rm=Tیا TRUE) حذف می کنیم .

    برای مثال

    Examples

    require(stats)

    (ii <- order(x <- c(1,1,3:1,1:4,3), y <- c(9,9:1), z <- c(2,1:9)))

    ## 6  5  2  1  7  4 10  8  3  9

    rbind(x, y, z)[,ii] # shows the reordering (ties via 2nd & 3rd arg)

    ## Suppose we wanted descending order on y.

    ## A simple solution for numeric 'y' is

    rbind(x, y, z)[, order(x, -y, z)]

    ## More generally we can make use of xtfrm

    cy <- as.character(y)

    rbind(x, y, z)[, order(x, -xtfrm(cy), z)]

     

    ## Sorting data frames:

    dd <- transform(data.frame(x, y, z),

                    z = factor(z, labels = LETTERS[9:1]))

    ## Either as above {for factor 'z' : using internal coding}:

    dd[ order(x, -y, z), ]

    ## or along 1st column, ties along 2nd, ... *arbitrary* no.{columns}:

    dd[ do.call(order, dd), ]

    set.seed(1)  # reproducible example:

    d4 <- data.frame(x = round(   rnorm(100)), y = round(10*runif(100)),

                     z = round( 8*rnorm(100)), u = round(50*runif(100)))

    (d4s <- d4[ do.call(order, d4), ])

    (i <- which(diff(d4s[, 3]) == 0))

    #   in 2 places, needed 3 cols to break ties:

    d4s[ rbind(i, i+1), ]

     

    ## rearrange matched vectors so that the first is in ascending order

    x <- c(5:1, 6:8, 12:9)

    y <- (x - 5)^2

    o <- order(x)

    rbind(x[o], y[o])

     

    ## tests of na.last

    a <- c(4, 3, 2, NA, 1)

    b <- c(4, NA, 2, 7, 1)

    z <- cbind(a, b)

    (o <- order(a, b)); z[o, ]

    (o <- order(a, b, na.last = FALSE)); z[o, ]

    (o <- order(a, b, na.last = NA)); z[o, ]

     

    ##  speed examples for long vectors:

    x <- factor(sample(letters, 1e6, replace = TRUE))

    system.time(o <- sort.list(x)) ## 0.4 secs

    stopifnot(!is.unsorted(x[o]))

    system.time(o <- sort.list(x, method = "quick", na.last = NA)) # 0.1 sec

    stopifnot(!is.unsorted(x[o]))

    system.time(o <- sort.list(x, method = "radix")) # 0.01 sec

    stopifnot(!is.unsorted(x[o]))

    xx <- sample(1:26, 1e7, replace = TRUE)

    system.time(o <- sort.list(xx, method = "radix")) # 0.1 sec

    xx <- sample(1:100000, 1e7, replace = TRUE)

    system.time(o <- sort.list(xx, method = "radix")) # 0.5 sec

    system.time(o <- sort.list(xx, method = "quick", na.last = NA)) # 1.3 sec

     

    با اعمال جبری زیر محاسبات ریاضی را روی عناصر بردار ها انجام می دهیم  :

    x<-c(3,2,5,7)

    2*x

    [1]  6  4 10 14

    در بالا2*x  همه عناصر بردار x را دو برابر می کند

    عدد 5 با همه عناصر بردار x جمع می شود. به صورت زیر :

    x+5

    [1]  8  7 10 12

    تابع لگاریتمlog() روی همه عناصر بردار x اعمال می شود. به صورت زیر :

    Log(x)

    [1] 1.0986123 0.6931472 1.6094379 1.9459101

    برای مثال

    Examples

    log(exp(3))

    [1] 3

    log10(1e7) # = 7

    [1] 7

    x <- 10^-(1+2*1:9)

    cbind(x, log(1+x), log1p(x), exp(x)-1, expm1(x))

              x                                                   

     [1,] 1e-03 9.995003e-04 9.995003e-04 1.000500e-03 1.000500e-03

     [2,] 1e-05 9.999950e-06 9.999950e-06 1.000005e-05 1.000005e-05

     [3,] 1e-07 1.000000e-07 1.000000e-07 1.000000e-07 1.000000e-07

     [4,] 1e-09 1.000000e-09 1.000000e-09 1.000000e-09 1.000000e-09

     [5,] 1e-11 1.000000e-11 1.000000e-11 1.000000e-11 1.000000e-11

     [6,] 1e-13 9.992007e-14 1.000000e-13 9.992007e-14 1.000000e-13

     [7,] 1e-15 1.110223e-15 1.000000e-15 1.110223e-15 1.000000e-15

     [8,] 1e-17 0.000000e+00 1.000000e-17 0.000000e+00 1.000000e-17

     [9,] 1e-19 0.000000e+00 1.000000e-19 0.000000e+00 1.000000e-19

     

    وقتی دو ضرب بردار با طول یکسان انجام شود عناصر انها نظیر به نظیر در هم ضرب می شوند . به صورت زیر

    x<-c(3,5,6,8)

    y<-c(3,4,5,6)

    x*y

    [1]  9 20 30 48

     

    برای تعیین طول یک بردار از تابع length() استفاده می کنیم .

    length(x)

    [1] 4

    برای مثال

    Examples

    length(diag(4))  # = 16 (4 x 4)

    length(options())  # 12 or more

    length(y ~ x1 + x2 + x3)  # 3

    length(expression(x, {y <- x^2; y+2}, x^y))  # 3

     

    ## from example(warpbreaks)

    require(stats)

     

    fm1 <- lm(breaks ~ wool * tension, data = warpbreaks)

    length(fm1$call)      # 3, lm() and two arguments.

    length(formula(fm1))  # 3, ~ lhs rhs

    طول هر عنصر اسمی به صورت زیر بدست می آید .

    nchar(x)

    [1] 1 1 1 1

    برای مثال

    Examples

    x <- c("asfef", "qwerty", "yuiop[", "b", "stuff.blah.yech")

    nchar(x)

    # 5  6  6  1 15

     

    nchar(deparse(mean))

    # 18 17  <-- unless mean differs from base::mean

     

    x[3] <- NA; x

    nchar(x, keepNA= TRUE) #  5  6 NA  1 15

    nchar(x, keepNA=FALSE) #  5  6  2  1 15

    stopifnot(identical(nchar(x, "w", keepNA = NA),

                        nchar(x,      keepNA = FALSE)),

              identical(is.na(x), is.na(nchar(x, keepNA=NA))))

    برای محاسبه جمع عناصر یک بردار عددی از تابع sum() استفاده می شود به صورت زیر :

    sum(x)

    [1] 22

    برای مثال

    Examples

    ## Pass a vector to sum, and it will add the elements together.

    sum(1:5)

     

    ## Pass several numbers to sum, and it also adds the elements.

    sum(1, 2, 3, 4, 5)

    ## In fact, you can pass vectors into several arguments, and everything gets added.

    sum(1:2, 3:5)

     

    ## If there are missing values, the sum is unknown, i.e., also missing, ....

    sum(1:5, NA)

    ## ... unless  we exclude missing values explicitly:

    sum(1:5, NA, na.rm = TRUE)

    برای اینکه تنها بخشی از مقادیر x با هم جمع شوند از دستور زیر استفاده می کنیم

    sum(x<6)

    [1] 2

    در  اینجا TRUE ها تبدیل به 1 و FALSEها تبدیل به 0 شدهخ و جمع تعداد TRUE ها برابربا عدد 3 شده است

    x<6

    [1]  TRUE  TRUE FALSE FALSE

    برای مثال

    Examples

    x <- stats::rnorm(20)

    x < 1

    [1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE

    [13] FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE

    x[x > 0]

    [1] 0.97544182 0.89978855 0.32681228 0.20001356 2.17957250 0.20720467

     [7] 0.61880724 0.71638194 1.05233183 0.83621023 2.08415532 0.03364438

    [13] 0.21450818

    x1 <- 0.5 - 0.3

    x2 <- 0.3 - 0.1

    x1 == x2                           # FALSE on most machines

    [1] FALSE

    identical(all.equal(x1, x2), TRUE) # TRUE everywhere

    [1] TRUE

    # range of most 8-bit charsets, as well as of Latin-1 in Unicode

    z <- c(32:126, 160:255)

    x <- if(l10n_info()$MBCS) {

        intToUtf8(z, multiple = TRUE)

    } else rawToChar(as.raw(z), multiple = TRUE)

    ## by number

    writeLines(strwrap(paste(x, collapse=" "), width = 60))

    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = >

    ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \

    ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z

    { | } ~   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹

    º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö ×

    Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ

    ö ÷ ø ù ú û ü ý þ ÿ

    ## by locale collation                       

    writeLines(strwrap(paste(sort(x), collapse=" "), width = 60))

    ­ ' -   ! " # $ % & ( ) * , . / : ; ? @ [ \ ] ^ _ ` { | } ~

    ¡ ¦ ¨ ¯ ´ ¸ ¿ ¢ £ ¤ ¥ + < = > ± « » × ÷ § © ¬ ® ° µ ¶ · 0 ¼

    ½ ¾ 1 ¹ 2 ² 3 ³ 4 5 6 7 8 9 a A ª á Á à À â Â ä Ä ã Ã å Å æ

    Æ b B c C ç Ç d D ð Ð e E é É è È ê Ê ë Ë f F g G h H i I í

    Í ì Ì î Î ï Ï j J k K l L m M n N ñ Ñ o O º ó Ó ò Ò ô Ô ö Ö

    õ Õ ø Ø p P q Q r R s S ß t T þ Þ u U ú Ú ù Ù û Û ü Ü v V w

    W x X y Y ý Ý ÿ z Z

     

    برای بدست آوردن مجموع عناصر کوچکتر از عدد 6 به صورت زیر است :

    sum(x[x<6])

    [1] 8

    برای مثال

    Examples

    ## Pass a vector to sum, and it will add the elements together.

    sum(1:5)

    [1] 15

    ## Pass several numbers to sum, and it also adds the elements.

    sum(1, 2, 3, 4, 5)

    [1] 15

    ## In fact, you can pass vectors into several arguments, and everything gets added.

    sum(1:2, 3:5)

    [1] 15

    ## If there are missing values, the sum is unknown, i.e., also missing, ....

    sum(1:5, NA)

    [1] NA

    ## ... unless  we exclude missing values explicitly:

    sum(1:5, NA, na.rm = TRUE)

    [1] 15

     

    تابعcumsum() برای محاسبه جمع تجمعی یک بردار عددی استفاده می کنیم  به صورت زیر :

    cumsum(x)

    [1]  3  8 14 22

     

    برای مثال

    Examples

    cumsum(1:10)

    [1]  1  3  6 10 15 21 28 36 45 55

    cumprod(1:10)

    [1]       1       2       6      24     120     720    5040   40320  362880

    [10] 3628800

    cummin(c(3:1, 2:0, 4:2))

    [1] 3 2 1 1 1 0 0 0 0

    cummax(c(3:1, 2:0, 4:2))

    [1] 3 3 3 3 3 3 4 4 4

    تابع prod() تمام مقادیر بردار را در هم ضرب می کند . به صورت زیر :

    prod(x) #3*2*5*7

    [1] 720

    برای مثال

    Examples

    print(prod(1:7)) == print(gamma(8))

    [1] 5040

    [1] 5040

    [1] TRUE

     

    تابع cumprod()مقادیر تجمعی ضرب عناصر بردار را ایجاد می کند . به صورت زیر :

    cumprod(x)

    [1]   3  15  90 720

    برای مثال

    Examples

    cumsum(1:10)

     [1]  1  3  6 10 15 21 28 36 45 55

    cumprod(1:10)

    [1]       1       2       6      24     120     720    5040   40320  362880

    [10] 3628800

    cummin(c(3:1, 2:0, 4:2))

    [1] 3 2 1 1 1 0 0 0 0

    cummax(c(3:1, 2:0, 4:2))

    [1] 3 3 3 3 3 3 4 4 4

    Share:

    comments

    No comments yet — be the first.

    Post comment