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

1402/06/14

دسترسی سریع


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

تمرین سوم درس 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

نظرات

هیچ نظری وجود ندارد.


افزودن نظر

Sitemap
Copyright © 2017 - 2023 Khavarzadeh®. All rights reserved