[Week 2] Programming with R
If
기본적인 제어문이다.
if(<condition>) {
## do something
} else {
## do something else
}
if(<condition1>) {
## do something
} else if(<condition2>) {
## do something different
} else {
## do something different
}
else는 없어도 된다.
for / while
for(i in 1:10) {
print(i)
}
This loop takes the i variable and in each iteration of the loop gives it values 1,2,3, ... , 10, and then exits.
These three loops have the same behavior.
x <- c("a", "b", "c", "d")
for(i in 1:4) {
print(x[i])
}
for(i in seq_along(x)) {
print(x[i])
}
for(letter in x) {
print(letter)
}
for(i in 1:4) print(x[i])
z <- 5
while(z >= 3 && z <= 10) {
print(z)
coin <- rbinom(1, 1, 0.5)
if(coin == 1) { ## random walk
z <- z + 1
} else {
z <- z - 1
}
}
Repeat
break를 써야만 중단할 수 있는 무한 루프를 생성 하게 된다.
The loop in the previous slide is a bit dangerous because there's no guarantee it will stop.
Better to set a hard limit on the number of iterations (e.g. using a for loop) and then report whether convergence was achieved or not.
Next
해당 iteration을 무시함.
Return
만나는 즉시 해당 function에서 나오게 된다.
그리고 주어진 값을 반환 한다.
Functions
기본적인 예제
Functions are created using the function() directive and are stored as R objects just like anything else.
In particular, they are R objects of class "function".
f <- function (<arguments>) {
## Do something interesting
}
Functions in R are "first class objects", which means that they can be treated much like any other R object.
Importantly,
Functions can be passed as arguments to other functions
Functions can be nested, so that you can define a function inside of another function The return value of a function is the last expression in the function body to be evaluated.
Argument Matching
You can mix positional matching with matching by name. When an argument is matched by name, it is "taken out" of the argument list and the remaining unnamed arguments are atched in the order that they are listed in the function definition.
Most of the time, named arguments are useful on the command line when you have a long argument list and you want to use the
Lazy Evaluation
Arguments to functions are evaluated lazily, so they are evaluated only as needed.
f<- function (a,b)
{ a^2 }
f(2)
두번째 인자를 사용하지 않아도 에러가 발생하지 않는다.
실제로 b를 사용하지 않기 때문이다.
f <- function (a,b) {
print (a)
print (b)
}
f(45)
[1] 45
Error: Argument "b" is missing, with no default
lazy evaluation의 의미는 위에서 보는것과 같이 최대한 error check을 뒤로 미뤄서 한다는 것에 있다.
The "..." Argument
The ... argument indicate a variable number of arguments that are usually passed on to other functions.
... is often used when extending another function and you don't want to copy the entire argument list of the original function.
myplot <- function (x, y, type = "1", ...) {
plot(x, y, type = type, ...)
}
Generic functions use ... so that extra arguments can be passed to methods (more on this later).
> mean
function (x, ...)
UseMethod("mean")
Scoping Rules
The scoping rules for R are the main feature that make it different from the original S language.
The scoping rules determine how a value is associated with a free variable in a function
R uses lexical scoping or static scoping. A common alternative is dynamic scoping.
Related to the scoping rules is how R uses the search list to bind a value to a symbol
Lexical scoping turns out to be particularly useful for simplifying statistical computations
Free variable의 정의
이것은 formal argument 가 아니다.
이것은 local variable이 아니다.
Lexical Scoping
Exploring a Function Closure
Lexical vs. Dynamic Scoping
함수 f에서 y와 함수 g는 free 변수 이다.
함수 G에서는 y가 free variable 이다.
With lexical scoping the value of y in the function g is looked up in the environment in which the function was defined,
in this case the global environment, so the value of y is 10.
With dynamic scoping, the value of y is looked up in the environment from which the function was called
(sometimes referred to as the calling environment).
- In R the calling environment is known as the parent frame
So the value of y would be 2.
When a function is defined in the global environment and is subsequently called from the global environment, then the defining environment and the calling environment are the same. This can sometimes give the appearance of dynamic scoping.
Coding Standards
1. Always use text files / text editor
2. Indent your code
3. Limit the width of your code (80 columns?)
4. Limit the length of individual functions
아래는 들여쓰기 공간을 4로 준것이고, 배경도 다크로 변경한 것이다.
[tool] -> [global options]
Dates and Times in R
R has developed a special representation of dates and times
Dates are represented by the Date class
Times are represented by the POSIXct or the POSIXlt class
Dates are stored internally as the number of days since 1970-01-01
Times are stored internally as the number of seconds since 1970-01-01
There are a number of generic functions that work on dates and times
weekdays: give the day of the week
months: give the month name
quarters: give the quarter number (“Q1”, “Q2”, “Q3”, or “Q4”)
Quiz 02
10문제이고 풀이는 첨부 파일과 같다.
Programming Assignment 1: Air Pollution
처음한 프로그래밍 과제
제출 방식이 R script를 이용한다.
아래와 같이 정상적으로 업로드 할경우 완료되는 것을 볼 수 있다.
'MOOC > R Programming' 카테고리의 다른 글
Certificate & Comment (0) | 2015.08.26 |
---|---|
[4 Week] Str & Simulation & R Profiler (0) | 2015.07.30 |
[3 Week] Loop Functions & Debugging Tools (1) | 2015.07.24 |
[1 Week] Getting stated and R Nuts and Bolts (0) | 2015.07.08 |