public bigdata

apply 계열 함수 정리하기 본문

R programming

apply 계열 함수 정리하기

public bigdata 2019. 9. 1. 20:50

1. lapply

2. sapply

##########예시##############
sapply(cafe24$PC_URL, function(url){
  url %>% 
    read_html() %>% 
    html_nodes(xpath = '//*[@property="product:sale_price:amount"]') %>% 
    html_attr('content')
})

sapply에서 data로는 vector, list, data.frame이 가능한데, vector가 들어가면 vector의 요소 하나씩 꺼내서 sapply의 function 인자로 들어간다. (아래 참조) min을 min(x)으로 사용하면 벡터 전체에서 최솟값을 찾아주지만 아래처럼 sapply에 벡터가 들어가는 경우에는 벡터의 요소 하나씩 꺼내서 function에 인자로 전달하기 때문에 아래와 같은 결과가 나온다. list, data.frame을 데이터로 사용하면 list의 요소는 벡터 또는 어떤 특정한 객체를 뜻하기 때문에 sapply의 function에 객체가 전달되어 min(객체)가 되므로 하나의 최솟값이 산출되지만(data.frame도 마찬가지), 벡터의 경우 원자 하나씩 전달되는 것을 주의

※ 위에서 객체라고 표현했는데, 길이가 1이 아닌 객체가 전달된다고 해야 정확하다. 벡터는 길이가 1인 객체 즉. 벡터의 원소 하나씩 전달되기 때문에 아래와 같은 결과가 나온다.

> sapply(iris$Sepal.Length, min)
  [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0
  [9] 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7
 [17] 5.4 5.1 5.7 5.1 5.4 5.1 4.6 5.1
 [25] 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4
 [33] 5.2 5.5 4.9 5.0 5.5 4.9 4.4 5.1
 [41] 5.0 4.5 4.4 5.0 5.1 4.8 5.1 4.6
 [49] 5.3 5.0 7.0 6.4 6.9 5.5 6.5 5.7
 [57] 6.3 4.9 6.6 5.2 5.0 5.9 6.0 6.1
 [65] 5.6 6.7 5.6 5.8 6.2 5.6 5.9 6.1
 [73] 6.3 6.1 6.4 6.6 6.8 6.7 6.0 5.7
 [81] 5.5 5.5 5.8 6.0 5.4 6.0 6.7 6.3
 [89] 5.6 5.5 5.5 6.1 5.8 5.0 5.6 5.7
 [97] 5.7 6.2 5.1 5.7 6.3 5.8 7.1 6.3
[105] 6.5 7.6 4.9 7.3 6.7 7.2 6.5 6.4
[113] 6.8 5.7 5.8 6.4 6.5 7.7 7.7 6.0
[121] 6.9 5.6 7.7 6.3 6.7 7.2 6.2 6.1
[129] 6.4 7.2 7.4 7.9 6.4 6.3 6.1 7.7
[137] 6.3 6.4 6.0 6.9 6.7 6.9 5.8 6.8
[145] 6.7 6.7 6.3 6.5 6.2 5.9

3. mapply

4. tapply

5. vapply

lapply 함수는 lapply(c(1, 2, 3), sum, na.rm=T)와 같이 사용할 때는 FUN인자 뒤에 전달할 인자들을 작성하면 되지만, FUN이 FUN=function(x, ...)와 같이 사용자 지정함수 이면서 추가적인 인자들이 필요한 경우에는 사용자 지정함수 안에 인자들을 미리 지정해줘야 하므로 불편하기에 사용자 지정함수를 미리 작성하고 FUN="함수이름"의 형태로 사용하는 것이 좋다.