تمرین سوم درس R - تابع () seq
دسترسی سریع
مائده فرج زاده
تمرین سوم درس 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