barcode

R 배워보기-4. 공식

Coding/R

공식 번외편도 따로 나갑니다. 


as.formula()

y~x
y ~ x

이놈은 문자고 

as.formula("y~x")
y ~ x

이놈은 공식이다. 

뭔 차이인지는 모르겠다. 

 

> measurevar="y"
> groupvars=c("x1","x2","x3")
paste(measurevar,paste(groupvars,collapse="+"),sep="=")
[1] "y=x1+x2+x3"

이놈도 문자인데 

as.formula(paste(measurevar, paste(groupvars, collapse=" + "), sep=" ~ "))
y ~ x1 + x2 + x3

이놈은 공식이다. 

역시 뭔 차이인지 모른다. 

 

공식의 구조

t=y~x1+x2

이렇게 공식을 만들어서 확인해보면(아, 참고로 <-나 =나 둘 다 된다)

str(t)
Class 'formula'  language y ~ x1 + x2
  ..- attr(*, ".Environment")=<environment: R_GlobalEnv>

랭귀지는 또 뭐여... 

> f=as.formula(y~x^2)
> str(f)
Class 'formula'  language y ~ x^2
  ..- attr(*, ".Environment")=<environment: R_GlobalEnv>

아무튼 공식이라는 클래스가 따로 있다. 

> t[[1]]
`~`
> t[[2]]
y
> t[[3]]
x1 + x2

이렇게 직접 뜯어보던가 

as.list(k)
[[1]]
`~`

[[2]]
y

[[3]]
x1/x2

as.list()로 볼 수 있다. (k에 할당된 공식은 y=x1/x2)

> l="y=x1/x2+x3/x4"
> as.list(l)
[[1]]
[1] "y=x1/x2+x3/x4"

참고로 텍스트는 이런 식으로 분리따원 되지 않는다. 

> n=as.formula(~x1+sqrt(x2))
> as.list(n)
[[1]]
`~`

[[2]]
x1 + sqrt(x2)

y는 생략해도 된다. (실화)

> str(f[[1]])
 symbol ~
> str(f[[2]])
 symbol y
> str(f[[3]])
 language x^2

str()을 써서 확인해보면 식 빼고 다 symbol이다. 살려주세요. 

 

as.character()

> as.character(f[[1]])
[1] "~"
> str(as.character(f[[1]]))
 chr "~"
> as.character(t[[3]])
[1] "+"  "x1" "x2"

그런데 짜잔 문자열이 되었습니다. 

 

deparse()

> deparse(t[[3]])
[1] "x1 + x2"
> deparse(t)
[1] "y ~ x1 + x2"

deparse로도 문자가 되긴 하지만 얘는 식이 부분부분 나눠지지는 않는다. (실화)

'Coding > R' 카테고리의 다른 글

R 배워보기-5. 데이터 불러오고 쓰기  (0) 2022.08.20
번외편-R로 미적분 하기  (0) 2022.08.20
R 배워보기-3. 문자열  (0) 2022.08.20
R 배워보기-2. Numbers  (0) 2022.08.20
R 배워보기-1. Basics  (0) 2022.08.20