R

R) target of assignment expands to non-language object

optimizing 2018. 7. 11. 22:46

dplyr 패키지를 이용해서 데이터프레임을 조작하고 있던 와중

일부 데이터를 조건에 맞춰 데이터프레임을 변수에 저장하려고 하는 상황으로

line_1 <- subway %>% filter(line_no == line_1)
line_2 <- subway %>% filter(line_no == line_8)
#1~8까지 코드 반복
line_8 <- subway %>% filter(line_no == line_8)

변하는것은 숫자만 변하고 있으니 반복문으로 돌리려 생각한 코드가 

 문자열을 paste 함수를 이용해서 이어붙여서 변수이름에다 두고, 뒤에 조건 논리식에 넣으면 되지 않을까 해서



for (i in 1:8){
paste0("line_",i) <- subway %>% filter (line_no == paste0("line_",i))
}

에러가 발생하는데

Error in paste0("line_", i) <- subway %>% filter(line_no == paste0("line_",  : 

target of assignment expands to non-language object



해결을 위해서는 바로 문자열로 반환되는 paste0 결과인 변수명에 

데이터 할당을 <- 로 하는것이 아닌 assign 함수를 사용하는것인데 



R-documentation을 보면

assign(변수이름 , 저장할데이터) 를 형식으로 사용합니다.






코드를 수정해보면 다음과 같이

for (i in 1:8) {
  assign(paste0("line_",i),subway %>% filter(line_no == paste0("line_",i)))
}


실행을 하면 편-안하게 변수가 반복문으로 생성된것을 확인할 수 있습니다.