λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ–₯️ IT, 컴퓨터

R basic

by Young's Th!nkTech 2024. 7. 3.

Modeν•¨μˆ˜

Rμ—μ„œ mode ν•¨μˆ˜λŠ” 객체의 μ €μž₯ λͺ¨λ“œλ₯Ό λ°˜ν™˜ν•œλ‹€. μ—¬κΈ°μ„œ "μ €μž₯ λͺ¨λ“œ"λŠ” 객체가 μ €μž₯λ˜λŠ” κΈ°λ³Έ μœ ν˜•μ„ μ˜λ―Έν•œλ‹€. Rμ—μ„œ κ°μ²΄λŠ” μ—¬λŸ¬ κ°€μ§€ μœ ν˜•μœΌλ‘œ μ €μž₯될 수 있으며, mode ν•¨μˆ˜λŠ” μ΄λŸ¬ν•œ μœ ν˜•μ„ ν™•μΈν•˜λŠ” 데 μ‚¬μš©λœλ‹€.

예λ₯Ό λ“€μ–΄, λ‹€μŒκ³Ό 같은 μ €μž₯ λͺ¨λ“œκ°€ μžˆλ‹€:

"numeric": μˆ«μžν˜• 데이터 (μ •μˆ˜μ™€ μ‹€μˆ˜λ₯Ό 포함)"character": λ¬Έμžν˜• 데이터"logical": λ…Όλ¦¬ν˜• 데이터 (TRUE, FALSE)"complex": λ³΅μ†Œμˆ˜ 데이터"list": 리슀트"function": ν•¨μˆ˜

λ‹€μŒμ€ mode ν•¨μˆ˜μ˜ λͺ‡ κ°€μ§€ μ˜ˆμ‹œμž…λ‹ˆλ‹€:

μˆ«μžν˜• 데이터:

rx <- 42
mode(x)
# [1] "numeric"

λ¬Έμžν˜• 데이터:

ry <- "hello"
mode(y)
# [1] "character"

λ…Όλ¦¬ν˜• 데이터:

rz <- TRUE
mode(z)
# [1] "logical"

리슀트:

rlst <- list(a = 1, b = "text")
mode(lst)
# [1] "list"

ν•¨μˆ˜:

rf <- function(x) { x + 1 }
mode(f)
# [1] "function"

mode ν•¨μˆ˜λŠ” 객체의 데이터 νƒ€μž…μ„ ν™•μΈν•˜λŠ” 데 μœ μš©ν•˜μ§€λ§Œ, Rμ—μ„œλŠ” 데이터 νƒ€μž…μ„ ν™•μΈν•˜λŠ” λ‹€λ₯Έ ν•¨μˆ˜λ“€λ„ μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, class ν•¨μˆ˜λŠ” 객체의 클래슀(즉, 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œμ˜ 클래슀)λ₯Ό λ°˜ν™˜ν•˜κ³ , typeof ν•¨μˆ˜λŠ” 객체의 μ €μˆ˜μ€€(low-level) νƒ€μž…μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ ν•¨μˆ˜λ“€μ€ 각기 λ‹€λ₯Έ λͺ©μ μ— 맞게 μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

rx <- 42
mode(x)
# [1] "numeric"
class(x)
# [1] "numeric"
typeof(x)
# [1] "double"

μœ„ μ˜ˆμ‹œμ—μ„œ x의 mode와 classλŠ” "numeric"μ΄μ§€λ§Œ, typeofλŠ” "double"μž…λ‹ˆλ‹€. μ΄λŠ” R이 숫자λ₯Ό double둜 μ €μž₯ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

λ”°λΌμ„œ, mode ν•¨μˆ˜λŠ” 객체의 μ €μž₯ λͺ¨λ“œλ₯Ό ν™•μΈν•˜λŠ” 데 μ‚¬μš©λ˜λ©°, μ΄λŠ” Rμ—μ„œ λ°μ΄ν„°μ˜ κΈ°λ³Έ μœ ν˜•μ„ μ΄ν•΄ν•˜λŠ” 데 도움을 μ€λ‹ˆλ‹€.

Strν•¨μˆ˜

str ν•¨μˆ˜λŠ” Rμ—μ„œ 객체의 ꡬ쑰λ₯Ό κ°„κ²°ν•˜κ²Œ λ³΄μ—¬μ£ΌλŠ” ν•¨μˆ˜μ΄λ‹€. 이 ν•¨μˆ˜λŠ” 데이터 ν”„λ ˆμž„, 리슀트, 벑터, νŒ©ν„° λ“± λ‹€μ–‘ν•œ 데이터 ꡬ쑰의 λ‚΄λΆ€ ꡬ쑰λ₯Ό μš”μ•½ν•˜μ—¬ 좜λ ₯ν•œλ‹€. str ν•¨μˆ˜λŠ” 특히 λ°μ΄ν„°μ˜ 크기와 νƒ€μž…μ„ λΉ λ₯΄κ²Œ νŒŒμ•…ν•˜λŠ” 데 μœ μš©ν•˜λ‹€.

str은 "structure"의 μ€„μž„λ§μ΄λ‹€. 이 ν•¨μˆ˜λŠ” 객체의 ꡬ쑰(structure)λ₯Ό ν•œλˆˆμ— νŒŒμ•…ν•  수 μžˆλ„λ‘ 도와쀀닀.

str ν•¨μˆ˜μ˜ μ‚¬μš© μ˜ˆμ‹œλ₯Ό λͺ‡ κ°€μ§€ λ³΄κ² μŠ΅λ‹ˆλ‹€:

벑터:

rx <- c(1, 2, 3, 4, 5)
str(x)
# num [1:5] 1 2 3 4 5

벑터 xλŠ” μˆ«μžν˜•(num) 벑터이고, 5개의 μš”μ†Œλ₯Ό κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.

데이터 ν”„λ ˆμž„:

rdf <- data.frame(
  name = c("Alice", "Bob", "Charlie"),
  age = c(25, 30, 35),
  married = c(TRUE, FALSE, TRUE)
)
str(df)
# 'data.frame':	3 obs. of  3 variables:#  $ name   : chr  "Alice" "Bob" "Charlie"#  $ age    : num  25 30 35#  $ married: logi  TRUE FALSE TRUE

데이터 ν”„λ ˆμž„ dfλŠ” 3개의 κ΄€μΈ‘μΉ˜(obs.)와 3개의 λ³€μˆ˜(variables)λ₯Ό κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. 각 λ³€μˆ˜μ˜ νƒ€μž…λ„ ν‘œμ‹œλ©λ‹ˆλ‹€.

리슀트:

rlst <- list(
  a = 1:5,
  b = "hello",
  c = list(d = 3.14, e = c(TRUE, FALSE))
)
str(lst)
# List of 3#  $ a: int [1:5] 1 2 3 4 5#  $ b: chr "hello"#  $ c:List of 2#   ..$ d: num 3.14#   ..$ e: logi [1:2] TRUE FALSE

리슀트 lstλŠ” 3개의 μš”μ†Œλ₯Ό κ°€μ§€κ³  있으며, 각 μš”μ†Œμ˜ νƒ€μž…κ³Ό λ‚΄μš©μ΄ 좜λ ₯λ©λ‹ˆλ‹€. μ€‘μ²©λœ λ¦¬μŠ€νŠΈλ„ ꡬ쑰가 ν‘œμ‹œλ©λ‹ˆλ‹€.

νŒ©ν„° (λ²”μ£Όν˜• 데이터):

rf <- factor(c("low", "medium", "high", "medium", "low"))
str(f)
# Factor w/ 3 levels "high","low","medium": 2 3 1 3 2

νŒ©ν„° fλŠ” 3개의 μˆ˜μ€€(levels)을 κ°€μ§€κ³  있으며, 각 μˆ˜μ€€μ˜ μˆœμ„œκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

이처럼 str ν•¨μˆ˜λŠ” λ‹€μ–‘ν•œ 데이터 ꡬ쑰의 μš”μ•½λœ 정보λ₯Ό μ œκ³΅ν•˜μ—¬ λ°μ΄ν„°μ˜ νŠΉμ„±μ„ λΉ λ₯΄κ²Œ νŒŒμ•…ν•  수 있게 ν•΄μ€λ‹ˆλ‹€. μ΄λŠ” 특히 λŒ€κ·œλͺ¨ λ°μ΄ν„°μ…‹μ΄λ‚˜ λ³΅μž‘ν•œ 리슀트 ꡬ쑰λ₯Ό λ‹€λ£° λ•Œ μœ μš©ν•©λ‹ˆλ‹€.

Length ν•¨μˆ˜

Rμ—μ„œ length ν•¨μˆ˜λŠ” 객체의 길이λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ "길이"λŠ” 벑터, 리슀트, λ¬Έμžμ—΄ λ“±μ˜ μš”μ†Œ 수λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. length ν•¨μˆ˜λŠ” λ‹€μ–‘ν•œ 데이터 ꡬ쑰에 적용될 수 있으며, 각 ꡬ쑰에 λŒ€ν•΄ μ μ ˆν•œ 길이λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

λ‹€μŒμ€ length ν•¨μˆ˜μ˜ λͺ‡ κ°€μ§€ μ‚¬μš© μ˜ˆμ‹œμž…λ‹ˆλ‹€:

벑터:

rv <- c(1, 2, 3, 4, 5)
length(v)
# [1] 5

벑터 vλŠ” 5개의 μš”μ†Œλ₯Ό κ°€μ§€κ³  μžˆμœΌλ―€λ‘œ, length(v)λŠ” 5λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

리슀트:

rlst <- list(a = 1:3, b = "hello", c = TRUE)
length(lst)
# [1] 3

리슀트 lstλŠ” 3개의 μš”μ†Œλ₯Ό κ°€μ§€κ³  μžˆμœΌλ―€λ‘œ, length(lst)λŠ” 3을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

데이터 ν”„λ ˆμž„:

rdf <- data.frame(
  name = c("Alice", "Bob", "Charlie"),
  age = c(25, 30, 35)
)
length(df)
# [1] 2

데이터 ν”„λ ˆμž„ dfλŠ” 2개의 열을 κ°€μ§€κ³  μžˆμœΌλ―€λ‘œ, length(df)λŠ” 2λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

λ¬Έμžμ—΄:

rstr <- "hello"
length(str)
# [1] 1

λ¬Έμžμ—΄ str은 ν•˜λ‚˜μ˜ μš”μ†Œλ‘œ κ°„μ£Όλ˜λ―€λ‘œ, length(str)λŠ” 1을 λ°˜ν™˜ν•©λ‹ˆλ‹€. λ¬Έμžμ—΄μ˜ μ‹€μ œ 길이λ₯Ό μ•Œκ³  μ‹Άλ‹€λ©΄ nchar ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€:

rnchar(str)
# [1] 5

nchar(str)λŠ” λ¬Έμžμ—΄ str의 문자 수λ₯Ό λ°˜ν™˜ν•˜μ—¬ 5λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

NULL κ°’:

rlength(NULL)
# [1] 0

NULL κ°’μ˜ κΈΈμ΄λŠ” 0μž…λ‹ˆλ‹€.

λ…Όλ¦¬ν˜• 벑터:

rlogical_vector <- c(TRUE, FALSE, TRUE)
length(logical_vector)
# [1] 3

λ…Όλ¦¬ν˜• 벑터 logical_vectorλŠ” 3개의 μš”μ†Œλ₯Ό κ°€μ§€κ³  μžˆμœΌλ―€λ‘œ, length(logical_vector)λŠ” 3을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

length ν•¨μˆ˜λŠ” Rμ—μ„œ 데이터 ꡬ쑰의 크기λ₯Ό ν™•μΈν•˜λŠ” 데 맀우 μœ μš©ν•˜λ©°, 데이터 뢄석 및 μ‘°μž‘ κ³Όμ •μ—μ„œ 자주 μ‚¬μš©λ©λ‹ˆλ‹€. 이λ₯Ό 톡해 λ°μ΄ν„°μ˜ 크기와 ꡬ성을 μ‰½κ²Œ νŒŒμ•…ν•˜κ³ , ν•„μš”ν•œ 연산을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.