공식 번외편도 따로 나갑니다.
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 |