2021/06/19 SAT
y <-10
f <- function(x){
y <- 2
y^2 + g(x)
}
g <- function(x) {
x*y
}
f(3)
[1] 34
This shows the difference between Lexical Scoping and Dynamic Scopping.
Consequences of Lexical Scoping 1) In R, all objects must be stored in memory. 2) All functions must carry a pointer to their respective defining environments, which could be anywhere. 3) In S-PLUS, free variables are always looked up in the global workspace, so everything can be stored on the disk because the “defining environment” of all functions is the same.
Maximizing a Normal Likelihood
make.NegLogLik <- function(data, fixed = c(FALSE, FALSE)){
params <- fixed
function(p){
params[!fixed] <- p
mu <- params[1]
sigma <- params[2]
a <- -0.5*length(data)*log(2*pi*sigma^2)
b <- -0.5*sum((data-mu)^2 / (sigma^2))
-(a+b)
}
}
set.seed(1); normals <- rnorm(100, 1, 2)
nLL <- make.NegLogLik(normals)
View(nLL)
ls(environment(nLL))
[1] "data" "fixed" "params"
看不懂,真不知道在讲啥 TAT mark 一下网址: https://www.coursera.org/learn/r-programming/lecture/Jm1s1/scoping-rules-optimization-example-optional
Coding Standards 1) Always use text files/ text editor 2) Indenting is IMPORTANT -> imporves readability Fixing line length(80 columns) prevents lots of nesting and vering long functions Suggested: Indents of 4 spaces at minimun; 8 spaces ideal
3)Limit
Dates and times 1) Date class 2) POSIXct or POSIXlt class 3) since 1970-01-01
x <- as.Date("1970-01-01")
x
[1] "1970-01-01"
unclass(x)
[1] 0
unclass(as.Date("1970-01-01"))
[1] 0
Current Time
Sys.time()
[1] "2021-06-19 10:35:37 CST"
p$sec
[1] 0
Use strptime function in case your dates are written in a different format
datestring <- c("January 10, 2012 10:40", "December 9, 2011 9:10")
x <- strptime(datestring, "%B %d, %Y %H:%M")
x
[1] "2012-01-10 10:40:00 CST" "2011-12-09 09:10:00 CST"
if you can not remember formatting strings
Operations on Dates and Times
y
[1] "2011-01-09 11:34:21 CST"
Showing the difference betwen x and y
x-y
Time difference of 356.8511 days
Different Time Zones
x <- as.Date("2012-03-01")
y <- as.Date("2012-02-28")
x- y
Time difference of 2 days
m <- as.POSIXct("2012-10-25 01:00:00")
n <- as.POSIXct("2012-10-25 06:00:00", tz = "GMT")
n - m
Time difference of 13 hours
LS0tCnRpdGxlOiAiQ291cnNlcmEgUiBwcm9ncmFtbWluZyB3ZWVrMiBub3RlczIiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KMjAyMS8wNi8xOSBTQVQKYGBge3J9CnkgPC0xMApmIDwtIGZ1bmN0aW9uKHgpewogICAgeSA8LSAyCiAgICB5XjIgKyBnKHgpCn0KZyA8LSBmdW5jdGlvbih4KSB7CiAgICB4KnkKfQpmKDMpCmBgYAoKVGhpcyBzaG93cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIExleGljYWwgU2NvcGluZyBhbmQgRHluYW1pYyBTY29wcGluZy4KCmBgYHtyfQoKYGBgCgpDb25zZXF1ZW5jZXMgb2YgTGV4aWNhbCBTY29waW5nCjEpIEluIFIsIGFsbCBvYmplY3RzIG11c3QgYmUgc3RvcmVkIGluIG1lbW9yeS4KMikgQWxsIGZ1bmN0aW9ucyBtdXN0IGNhcnJ5IGEgcG9pbnRlciB0byB0aGVpciByZXNwZWN0aXZlIGRlZmluaW5nIGVudmlyb25tZW50cywgd2hpY2ggY291bGQgYmUgYW55d2hlcmUuCjMpIEluIFMtUExVUywgZnJlZSB2YXJpYWJsZXMgYXJlIGFsd2F5cyBsb29rZWQgdXAgaW4gdGhlIGdsb2JhbCB3b3Jrc3BhY2UsIHNvIGV2ZXJ5dGhpbmcgY2FuIGJlIHN0b3JlZCBvbiB0aGUgZGlzayBiZWNhdXNlIHRoZSAiZGVmaW5pbmcgZW52aXJvbm1lbnQiIG9mIGFsbCBmdW5jdGlvbnMgaXMgdGhlIHNhbWUuCgpNYXhpbWl6aW5nIGEgTm9ybWFsIExpa2VsaWhvb2QKYGBge3J9Cm1ha2UuTmVnTG9nTGlrIDwtIGZ1bmN0aW9uKGRhdGEsIGZpeGVkID0gYyhGQUxTRSwgRkFMU0UpKXsKICAgICAgICBwYXJhbXMgPC0gZml4ZWQKICAgICAgICBmdW5jdGlvbihwKXsKICAgICAgICAgICAgICBwYXJhbXNbIWZpeGVkXSA8LSBwCiAgICAgICAgICAgICAgbXUgPC0gcGFyYW1zWzFdCiAgICAgICAgICAgICAgc2lnbWEgPC0gcGFyYW1zWzJdCiAgICAgICAgICAgICAgYSA8LSAtMC41Kmxlbmd0aChkYXRhKSpsb2coMipwaSpzaWdtYV4yKQogICAgICAgICAgICAgIGIgPC0gLTAuNSpzdW0oKGRhdGEtbXUpXjIgLyAoc2lnbWFeMikpCiAgICAgICAgICAgICAgLShhK2IpCiAgICAgICAgfQp9CnNldC5zZWVkKDEpOyBub3JtYWxzIDwtIHJub3JtKDEwMCwgMSwgMikKbkxMIDwtIG1ha2UuTmVnTG9nTGlrKG5vcm1hbHMpClZpZXcobkxMKQpscyhlbnZpcm9ubWVudChuTEwpKQpgYGAK55yL5LiN5oeC77yM55yf5LiN55+l6YGT5Zyo6K6y5ZWlIFRBVAptYXJrIOS4gOS4i+e9keWdgO+8miBodHRwczovL3d3dy5jb3Vyc2VyYS5vcmcvbGVhcm4vci1wcm9ncmFtbWluZy9sZWN0dXJlL0ptMXMxL3Njb3BpbmctcnVsZXMtb3B0aW1pemF0aW9uLWV4YW1wbGUtb3B0aW9uYWwKCgoKQ29kaW5nIFN0YW5kYXJkcwoxKSBBbHdheXMgdXNlIHRleHQgZmlsZXMvIHRleHQgZWRpdG9yCjIpIEluZGVudGluZyBpcyBJTVBPUlRBTlQgLT4gaW1wb3J2ZXMgcmVhZGFiaWxpdHkKICAgIEZpeGluZyBsaW5lIGxlbmd0aCg4MCBjb2x1bW5zKSBwcmV2ZW50cyBsb3RzIG9mIG5lc3RpbmcgYW5kIHZlcmluZyBsb25nIGZ1bmN0aW9ucwogICAgU3VnZ2VzdGVkOiBJbmRlbnRzIG9mIDQgc3BhY2VzIGF0IG1pbmltdW47IDggc3BhY2VzIGlkZWFsCgozKUxpbWl0CgpEYXRlcyBhbmQgdGltZXMKMSkgRGF0ZSBjbGFzcwoyKSBQT1NJWGN0IG9yIFBPU0lYbHQgY2xhc3MKMykgc2luY2UgMTk3MC0wMS0wMQpgYGB7cn0KeCA8LSBhcy5EYXRlKCIxOTcwLTAxLTAxIikKeAp1bmNsYXNzKHgpCnVuY2xhc3MoYXMuRGF0ZSgiMTk3MC0wMS0wMSIpKQpgYGAKQ3VycmVudCBUaW1lCmBgYHtyfQpTeXMudGltZSgpCmBgYAoKYGBge3J9CnAgPC0gYXMuUE9TSVhsdCh4KQpuYW1lcyh1bmNsYXNzKHApKQp4JHNlYwpwJHNlYwpgYGAKVXNlIHN0cnB0aW1lIGZ1bmN0aW9uIGluIGNhc2UgeW91ciBkYXRlcyBhcmUgd3JpdHRlbiBpbiBhIGRpZmZlcmVudCBmb3JtYXQKYGBge3J9CmRhdGVzdHJpbmcgPC0gYygiSmFudWFyeSAxMCwgMjAxMiAxMDo0MCIsICJEZWNlbWJlciA5LCAyMDExIDk6MTAiKQp4IDwtIHN0cnB0aW1lKGRhdGVzdHJpbmcsICIlQiAlZCwgJVkgJUg6JU0iKQp4CmBgYAoKaWYgeW91IGNhbiBub3QgcmVtZW1iZXIgZm9ybWF0dGluZyBzdHJpbmdzCmBgYHtyfQo/c3RycHRpbWUKYGBgCgpPcGVyYXRpb25zIG9uIERhdGVzIGFuZCBUaW1lcwpgYGB7cn0KeCA8LSBhcy5EYXRlKCIyMDEyLTAxLTAxIikKeSA8LSBzdHJwdGltZSgiOSBKYW4gMjAxMSAxMTozNDoyMSIsICIlZCAlYiAlWSAlSDolTTolUyIpCnkKYGBgClNob3dpbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VuIHggYW5kIHkKYGBge3J9CnggPC0gYXMuUE9TSVhsdCh4KQp4LXkKYGBgCkRpZmZlcmVudCBUaW1lIFpvbmVzCmBgYHtyfQp4IDwtIGFzLkRhdGUoIjIwMTItMDMtMDEiKQp5IDwtIGFzLkRhdGUoIjIwMTItMDItMjgiKQp4LSB5CgptIDwtIGFzLlBPU0lYY3QoIjIwMTItMTAtMjUgMDE6MDA6MDAiKQpuIDwtIGFzLlBPU0lYY3QoIjIwMTItMTAtMjUgMDY6MDA6MDAiLCB0eiA9ICJHTVQiKQpuIC0gbQpgYGAKCg==