R "target of assignment expands to non-language object" error : assign()
R 분석과 프로그래밍/R 프로그래밍 2015. 9. 22. 13:10R 프로그래밍 중에 "target of assignment expands to non-language object" error 메시지가 발생하면 assign() 함수를 사용하여 문제를 해결할 수 있습니다.
"target of assignment expands to non-language object" error 가 발생하는 이유는 할당하려는 목표 객체(Target object) 를 R이 인식하지 못해 NULL 값으로 처리되어 있는 상태이기 때문입니다.
아래에 이런 에러가 발생하는 간단한 예와 해결 방법을 소개해보겠습니다.
x변수는 1부터 30까지의 정수, y변수는 1부터 5까지의 정수이고, 이 두변수를 묶어서 xy라는 데이터 프레임을 만들어보겠습니다.
> y <- c(1:5) > > xy <- data.frame(x, y) > > str(xy) 'data.frame': 30 obs. of 2 variables: $ x: int 1 2 3 4 5 6 7 8 9 10 ... $ y: int 1 2 3 4 5 1 2 3 4 5 ... > > xy x y 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 1 7 7 2 8 8 3 9 9 4 10 10 5 11 11 1 12 12 2 13 13 3 14 14 4 15 15 5 16 16 1 17 17 2 18 18 3 19 19 4 20 20 5 21 21 1 22 22 2 23 23 3 24 24 4 25 25 5 26 26 1 27 27 2 28 28 3 29 29 4 30 30 5
|
위에서 생성한 xy 데이터프레임을 가지고, y변수 1, 2, 3, 4, 5 를 포함한 행(row) 별로 각 각 개별 데이터 프레임을 Loop 를 사용해서 만들어보겠습니다. 아래 Loop program에서 목표 객체(Target object)에 paste() 함수를 사용해서 공통 접두사(predix)로 'xy_'를 사용하고 뒤에 'i'로 loop 를 돌면서 1, 2, 3, 4, 5 를 붙여주려고 프로그램을 짰습니다만, "target of assignment expands to non-language object" 라는 오류 메시지가 떴습니다. 아래 프로그램에 대해 R은 [ paste("xy_", i, sep="") ]부분을 NULL 값으로 인식하기 때문에 이런 오류가 발생하게 됩니다.
> for (i in 1:5) { + paste("xy_", i, sep="") <- subset(xy, subset = (y == i)) + } Error in paste("xy_", i, sep = "") <- subset(xy, subset = (y == i)) :
target of assignment expands to non-language object
|
위 프로그램에서 하고자 했던 의도대로 R이 이해하고 실행을 하게끔 하려면 assign() 함수를 사용해야만 합니다. assign() 함수를 사용할 때는 아래 처럼 '<-' 대신에 ',' 가 사용되었음에 주의하시기 바랍니다.
> for (i in 1:5) { + assign(paste("xy_", i, sep=""), subset(xy, subset = (y == i))) + } > > xy_1 x y 1 1 1 6 6 1 11 11 1 16 16 1 21 21 1 26 26 1 > > xy_2 x y 2 2 2 7 7 2 12 12 2 17 17 2 22 22 2 27 27 2 > > xy_3 x y 3 3 3 8 8 3 13 13 3 18 18 3 23 23 3 28 28 3 > > xy_4 x y 4 4 4 9 9 4 14 14 4 19 19 4 24 24 4 29 29 4 > > xy_5 x y 5 5 5 10 10 5 15 15 5 20 20 5 25 25 5 30 30 5
|
많은 도움이 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^
'R 분석과 프로그래밍 > R 프로그래밍' 카테고리의 다른 글
[R] 여러개의 데이터프레임을 한꺼번에 하나의 데이터프레임으로 묶기, data.table package : rbindlist(data) (8) | 2016.07.10 |
---|---|
[R] 폴더 내 여러개 파일들을 Loop 돌려서 자동으로 불러오기 (154) | 2016.07.02 |
ggplot2 저장 : ggsave(), console 내용 text 저장 : capture.output() (0) | 2015.09.17 |
R 사용자 정의 함수 (User Defined Function) (4) | 2015.09.11 |
R 조건 연산 프로그래밍 (conditional process programming) : if(), elseif() (19) | 2015.09.05 |