서평: 니킬 서발, 『큐브, 칸막이 사무실의 은밀한 역사』, 김승진 옮김, 이마, 2015. 


원제: “Cubed: The Secret History of the Workplace.” 한국어 제목은 『큐브, 칸막이 사무실의 은밀한 역사』. 영어 제목을 본다면 책은 일터로서의 직장 공간을 강조하고자 하는 미묘한 어감을 풍기고, 한국어 제목은 사무실의 건축적 특성에 좀 더 방점을 둔 것처럼 보인다. 결론부터 말하면 둘 다 맞다. 저자는 한편으로는 노동사회학과 경영학의 연구 성과를, 또 다른 한편으로는 건축과 도시 계획에 대한 지식을 활용해, 사무실이란 어떤 곳인지 또 화이트 칼라 노동은 어떻게 변해왔는지 19세기 후반부터 현재까지의 사무실workplace 전반의 역사를 개괄하고자 시도한다. 

19세기 후반까지 우리가 상상하는 화이트칼라들이 일하는 사무 공간은 낯선 곳이었다. 책의 1장은 멜빌의 「필경사 바틀비」를 소개하며 시작하는데, 작품이 쓰인 1853년은 “사무실이 이제 막 세상 사람들의 인식에 잉크 자국을 내기 시작했”을 때였다(23쪽). 19세기 후반까지 사무원이라고 할 수 있는 사람들은 전체 노동 인구의 오 퍼센트에도 못 미쳤고 그들의 작업 방식 역시, 우리가 흔히 생각하는 파티션으로 칸칸이 나뉜 좁은 구역에서 일하는 것과는 거리가 멀었다. 많은 경우 사무원들의 일은 회계 업무나 베껴 쓰기(필경)였고, 이들은 잡화점이나 상사(商社)에서 비즈니스맨과 함께 부대끼며 일했다. 이때 사무원들의 일은 보통 긍정적으로 여겨지지는 않았다. 남성적이지 않고 미국적 정신에 반하는 것으로 느껴졌던 것이다. 

19세기 후반 대불황을 겪으며 많은 기업들이 수직적으로 통폐합된 경제적 배경과 철도와 우편 등의 인프라가 발달된 사회적 배경 하에서 사무원의 수는 매우 늘어났고, 건축술의 발달로 고층 빌딩이 비록 에어컨은 없었지만 그들을 오밀조밀 수용할 수 있게 되었다. 19세기 미국에서 사무원이 당시의 사회문화적 맥락에서 어떤 정체성을 가지고 있었고 또 그들의 수가 어떻게 늘어났는지를 제1장에서 개괄한 후, 제2장은 테일러의 ‘과학적’ 관리 방법과 커뮤니케이션 수단의 발달, 당시 미국의 노동쟁의와 경영 상황이 우리가 흔히 아는 사무실 공간에 끼친 영향을 다룬다. 

사무 공간에는 남자만 있었을까? 1870년에는 그랬지만, 1920년에는 여성이 미국 사무직 노동자의 거의 절반을 차지했다. 대부분 속기사나 타자수, 비서 업무에 국한되었지만. 제3장은 사무실 일터에서 여성의 지위를 일과 성(性)의 측면에서 모두 다룬다. 여성의 사무실로의 진입은 여러 의미에서 일터의 질서와 문화에 균열을 냈다(아주 재밌는 부분이었는데, 자세한 내용은 책을 참고). 

제4장은 모더니즘과 사무실 건축에 대한 이야기이다 -- 르 코르뷔지에 같은 익숙한 이름이 나온다. 에어컨과 형광등, 달반자suspended ceiling는 현재 우리가 아는 사무 빌딩을 건축하는 데에 큰 영향을 미쳤다. 제5장은 직전 장과 달리 빌딩 내부의 이야기 -- 사무실 내에서의 인종적 소수자들의 지위, 진취적 정신과 배치되는 관료제적이고 순응적인 조직형 인간들에 대한 무성한 논의들, (오피스 와이프를 포함한) 직장과 아내들의 관계 -- 를 다룬다. 

6장은 초점을 조금 바꾸어, 1960년대 즈음 사무실 내부 공간을 혁신하고자 했던 건축가와 디자이너들의 시도를 다룬다. 작업 공간을 창조적인 곳으로 만들고자 했던 시도는 피터 드러커 등의 지식 노동론이나, 과학적 관리 이후의 인사 관리 이론 등의 경영학 성과와 무관하지 않다. 그런데 딱딱한 사무 공간을 능동적인 업무와 창발적인 성과들이 오가는 곳으로 변화하고자 했던 액션 오피스 등의 시도는 그리 만족스럽지 못했는데, 저자는 “유연성을 위해 만들어”진 액션 오피스가 “‘인간적인’ 헝겊”으로 싸인 “경직성”을 들여왔다고 지적한다(290쪽; 제임스 스콧의 『국가처럼 보기』가 생각나는 대목이다). 

7장은 6장의 문제의식의 맥을 이어, AT&T의 예시를 중심으로 20세기 모더니즘 건축의 실패와 사무실에 대한 이야기를 전개한 다음, 미국 자본주의의 황금기가 끝난 이후의 사무실의 변화를 다룬다. 1980년대 후반에서 1990년대는 개인용 컴퓨터의 보급과 중간 관리자의 대량 해고 등으로 특징지어지는데, 이러한 배경 속 여성 비서들의 저항 운동이나 사무직 노조 운동에 대한 이야기가 매끄럽게 읽힌다. 

8장과 9장은 현재와 미래의 사무실을 다루고 있다. 미래의 사무실 문화로 지목되는 대표적인 것들은 일과 휴식, 놀이의 경계가 뒤섞인 사무실이나 재택 근무 문화이다. 이러한 혁신들은 주로 실리콘 밸리의 벤처 기업에서 많이 이뤄졌는데, 그것들이 모두 성공적이지만은 않았다. 8장은 사무실의 칸막이를 없애는 등의 시도가 놓치고 있는 것은 일반 직원과 같은 ‘아래로부터의’ 목소리를 수렴하고자 하는 것이 아닌지, 즉 혁신과 창의라는 미명 하의 계획들이 사무실의 문화를 과대 결정(overdetermine)하는 것은 아닌지 암시한다. 

9장의 말미는 우리가 1990년대 이후 사무실을 혁신하고자 하는 시도에서 주의해야만 할 것은 바로 늘어난 비정규직 인력임을 보인다. 어떻게 본다면 현재의 사무실 문화는 19세기 중반의 그것과 흡사한 듯하다. “19세기 중반에 노동 시장은 광대하고 규제가 없었다. ... 사무실이 사라질지 모른다는 것, 적어도 20세기 초에 등장한 것 같은 형태의 사무실이 사라질지 모른다는 것도 우연은 아니다.”(415쪽) 저자는 책의 앞에서 인용한 C. W. 밀스의 문장을 책의 끄트머리에서 다시금 꺼낸다. 

이렇게 책을 덮으면 종횡무진 이어진 화이트칼라 사무 공간의 역사 기행이 끝나게 된다. 종횡무진이라는 것은 단순한 수사가 아닌데, 저자의 박식함 덕택에 약 150년의 사무 공간의 역사가 건축이나 경영학, 노동사회학, 여성학, 당시의 소설과 광고 등 여러 주제와 제재를 넘나들며 흥미롭게 조명되고 있기 때문이다. 물론 많은 정보들을 난삽하지 않고 읽기 즐겁게 이어 놓은 저자의 글쓰기 솜씨도 중요함은 언급해야겠다. 내가 일하고 있는 이 공간의 역사가 궁금한 교양 독자에게도, 아니면 그저 탁월한 논픽션을 즐겁게 읽고 싶은 심심한 독자에게도 이 책을 권하고 싶다. 

루소에게 정치는 지나치게 사회화된 자아의 신경증과도 복잡하게 얽혀 있는 것이었다. 루소는 개인적인 성공에도 불구하고 자신이 사회적 계급 구조 밑바닥에 있다고 생각하는 사람, 또 자신은 기존 질에서 결코 적응할 수 없다고 확신하는 사람의 전형이었다. 루소의 자신감과 독선은 자신이 근대적 삶의 악덕으로부터 벗어났다는 확고한 믿음에서 기인한 것이었다. 이데올로기적 대의와 종교적 신앙의 많은 개종자처럼, 루소는 고독한 삶을 살기 때문에 자신은 타락한 환경으로부터 어떤 영향도 받지 않는다고 확신했다. 이렇게 자신은 청렴결백하다고 확신한 까닭에 루소는 사회적 제약들로부터 해방된 고결한 존재라는 분위기를 풍겼고, 무력감에서 벗어나 무엇이든 할 수 있다는 자신감도 갖게 되었다. 결국 피해자 의식을 떨쳐 내고 도덕적으로 우월한 위치에 올라섬으로써 루소는 오늘날 진부해진 ‘원한’의 변증법을 시행한 셈이었다. 

    오염된 사회보다 깨끗하고 순수한 영적인 삶, 부자보다 가난한 사람, 특권 계급보다 보통 사람들, 무신론과 무절제한 자유보다 종교적인 정서를 옹호하며, 루소는 힘 있는 엘리트보다 상처받고 모욕당한 사람들을 대신해 목소리를 높였다. 아렌트가 지적했듯이 프랑스 대혁명의 ‘다정한 미소’가 ‘위선의 가면을 찢어 버린 것’은 우연이 아니었다. 루소가 낳은 첫 번째 위대한 제자, 막시밀리앵 로베스피에르가 ‘타락의 뒤덮인 허울을 뜯어내고, 그 뒤에 감추어진 민중의 훼손되지 않은 정직한 얼굴을 드러내려고’ 집착한 것도 우연은 아니었다. (142쪽) 


더욱이 우리는, 바쿠닌이 1948년 이후로 그랬듯이, 미래에 대한 믿음, 즉 현실이 목적과 방향을 가진 것으로 보이게 만들어 주는 근본적인 낙관주의가 파괴된 현실에 고통스러워 하고 있다. 그럼에도 이와 같은 현실은 이상하리만치 잘 감지되고 있지 않다. 1994년만 해도, 바츨라프 하벨은 근대 사회가 강요한 탈정신화를 한탄하면서도 ‘새로운 신: 생산과 소비의 영구적 성장이라는 이상’을 들먹일 수 있었다. 오늘날 신이 없는 세계에서 살아가려면 진보에 대한 믿음이 반드시 필요하지만, 앳된 얼굴의 밀레니얼 세대가 득실대는 실리콘 밸리를 제외하면 그 믿음이 더 이상 존속되지 못하는 듯하다. (384쪽) 



김시덕. 『서울 선언』. 열린책들. 2018. 

저자 약력을 보면 조금 의아할 수 있다. 문헌학자가 왜 굳이 서울 답사에 대한 책을? 안 되는 건 아니지만, 여하튼 도시 연구자도 아니고 기행문을 주로 쓰는 작가도 아닌 연구자의 정체성을 가진 저자가 왜 이런 책을 냈는지 궁금해지는 게 있다. 

    해답은 출판사 책소개에 있지 않고 책 첫머리(“여기도 서울인가?”)에 있다. “서울에 대한 책은 수없이 많습니다. 그 사실을 알면서도 저는 서울을 테마로 하는 책을 쓰기로 결심했습니다. ... 한국을 떠나기 전에 서울에 대한 기록을 남기자는 것이죠. 자신들과 생각이 다르다는 이유로 저를 몰아내려 한 직장 내 일부 세력과의 싸움이 시작된 것은 2017년 3월이었습니다.” 글에서 언급하는 사건은 『한국경제』의 이 글에 소개되어 있다.  이것 말고도 책 맨 뒤의 후기를 보면 열린책들 출판사에서 그동안 안 팔릴 만한 책을 많이 냈으니 이번에는 팔릴 만한 책을 출판해보자... 하는 생각이 있었던 것 같다. (요새 이런 류의 답사문이 잘 나가나 하는 의문은 뒤로 넘겨두자.) 

    따라서 이 책은 기본적으로 서울 지역에 대한 깊이 있는 연구서는 아니다. 서울에 애정이 있는 저자가 문헌학자로서의 정체성을 가지고 서울 내에서 그동안 주목을 받지 못했던 장소들--공간적으로는 사대문 밖에 위치해 있고, 역사적으로는 주류 담론의 주목을 받지 못한--에 대해 답사하며 느낀 지점이나 지역들의 그동안 잘 알려지지 않았던 정보들을 조합해 가볍게 쓴 에세이라고 하는 게 제일 옳을 것 같다. 하여 책이 다루고 있는 서울 내 공간들에 대해 더 관심을 갖고자 하는 독자는 이 책을 발판삼아 다른 연구들을 참고하는 것이 더 좋을 테다. 

    문헌학 연구자라는 저자의 특성이 잘 살려진 챕터는 제3장 “서울 걷기 실전편”이다. 이 장에서는 청계천, 남산·삼각지·용산 일대, 양수리에서 영등포까지의 한강 이남 일대, 흑석동과 청계천, 구로 공단 등이 다른 서울 답사 서적에서는 주로 다뤄지지 않는 고문헌들이나 역사적 배경과 함께 이야기된다. 나는 특히 제3장 마지막의 시흥 부분이 제일 좋았다. 시흥을 다룬 절은 사대문 바깥의 서울 지역이 어떻게 대한민국 건립 이후 급속한 개발 과정에서 정체성을 상실해 왔는지를 간결하게 보여 주는데, 시흥이 겪었던 운명은 몽촌동이나 청계천 같은 동네들이 밟았던 변모 과정의 핵심들이 추려져 들어가 있는 아이디얼한 사례가 아닌가 싶어서. 


대일본 맥주 주식회사의 일본 본사는 조선의 영등포에 자회사인 조선 맥주 주식회사를 설립합니다. 광복 후에 이 회사는 크라운 맥주, 뒤이어 하이트 맥주가 됩니다. 영등포역에서 서남쪽에 위치하던 대일본 맥주 공장 자리에는 현재 대우 푸르지오 아파트가 세워져 있습니다. 한편, 대일본 맥주의 경쟁사였던 쇼와 기린 맥주 공장은 영등포역 동쪽에 세워졌는데, 이곳은 해방 후 오비 맥주가 되었다가 지금은 영등포 공원으로 바뀌어 있습니다. (182쪽)

영등포 서쪽에 자리한 문래는, 태평양 전쟁이 한창이던 1940년대 초에 조선 주택 영단이 소형 영단 주택을 건설한 곳입니다. 그 후 이곳은 영단 주택 단지의 공간 구조가 유지된 상태로 소규모 공장들이 들어서서 지금까지도 작은 공단을 이루고 있습니다. 최근 십여 년 사이에는 이런 분위기를 좇아 예술가들이 들어와서, 옛 영단 주택 단지와 그 주변은 일부 예술가들의 창작 거점으로 이용되고 있기도 합니다. 제가 2017년 10월에 옛 영단 주택 단지 일대를 답사했을 때에는 창작 공간들과 함께 현대식 카페가 이곳저곳에 들어서 있었고, 영단 주택 단지 사방을 고층 아파트 단지가 둘러싸고 있었습니다. 문래의 옛 영단 주택 단지가 언제까지 공단으로서 기능할 수 있을지 예측하기 어렵다고 생각했습니다. (279쪽)


[R] 조건문 (if)

2018. 6. 5. 14:18
R_if

조건문: if

R에서 조건문은 어떻게 쓸까? 다른 프로그래밍 언어들이 그러하듯 R도 if문을 쓴다.

  • if (expression_1) expression_2
    • 괄호 안의 조건문이 참이면 다음을 실행
  • if (expression_1) expression_2 else expression_3
    • 괄호 안의 조건문이 참이 아니면, expression_3을 실행
  • if else를 쓸 때에는 들여쓰기를 주의해야 함.
condition <- 1
x <- 100

if (condition == TRUE) 
{
  print("Hello, world!")
}
## [1] "Hello, world!"
if (x > 90) 
{
  print("more than 100")
} else # indent 주의 
{
  print("less than 100")
}
## [1] "more than 100"
  • if (expression_1) else if (expression_2) else expression_3도 가능.
check <- function(x)
{
  if(is.numeric(x) == TRUE | is.integer(x) == TRUE)
  {
    print("NUMBER")
  } 
  else if (is.character(x) == TRUE) 
  {
    print("CHARACTER")
  } 
  else
  {
    print("OTHERS")
  }
}
check(150); check("abc"); check(TRUE)
## [1] "NUMBER"
## [1] "CHARACTER"
## [1] "OTHERS"

Switch 함수

  • 조건문의 대상이 여러 개인 경우 사용할 수 있다.
  • else if를 반복해 사용하지 않아도 된다.
# 아래는 R help의 예제 
centre <- function(x, type) 
{
  switch(type,
         mean = mean(x),
         median = median(x))
}
x <- rcauchy(10) # 무작위로 수 10개 생성 
centre(x, "mean")
## [1] -0.6019167
centre(x, "median")
## [1] -0.4782902

ifelse

  • ifelse(test, yes, no)
    • test의 조건문이 참이면, yes 자리의 expression 실행.
    • test의 조건문이 거짓이면, no 자리의 expression 실행.
neg <- function(x)
{
  ifelse(x >= 0, "non-negative", "negative")
}

neg(3); neg(-10)
## [1] "non-negative"
## [1] "negative"
Untitled

이번 글에서는 R의 데이터 객체 유형 중 데이터 프레임과 리스트를 다뤄보고자 한다.

데이터 프레임

  • 데이터 프레임은 변수(column)와 관찰치(row)로 구성된 2차원 자료 객체이다.
  • 각 열은 하나의 벡터로 인식되며, 벡터가 같은 데이터 유형을 갖듯 열의 요소들도 같은 데이터 유형을 갖는다.
    • 데이터 프레임 속의 열들의 길이는 동일해야 한다.
  • 서로 다른 열은 다른 데이터 유형을 가질 수 있다.

  • 데이터 프레임은 다음과 같이 생성한다.
  • data.frame(..., row.names = NULL, check.rows = FALSE, check.names = TRUE)
    • …의 자리에는 벡터, 행렬, 리스트, 심지어는 다른 데이터 프레임 등 객체가 온다.
    • row.names : 행들의 이름. NULL은 기본값 (일련 번호)
    • check.rows : 결합 객체들의 행 길이가 같은지 확인
    • check.names : 이름들이 중복되는지 여부 확인
  • 유의: 문자형 변수는 범주형(factor)로 자동으로 변환된다.
    • 문자형(character)으로 하고 싶다면 뒤에 stringsAsFactors = FALSE argument를 삽입하면 된다.

아래는 예시.

x <- 1 : 7; y <- LETTERS[1 : 7] # LETTERS[]: 알파벳 대문자. cf) letters[]
z <- matrix(11 : 24, nrow = 7)
test <- data.frame(x, y, z)
test2 <- data.frame(first = x, second = y, third = z) # 각 열벡터에 이름 지정
test2 
##   first second third.1 third.2
## 1     1      A      11      18
## 2     2      B      12      19
## 3     3      C      13      20
## 4     4      D      14      21
## 5     5      E      15      22
## 6     6      F      16      23
## 7     7      G      17      24
w <- 1 : 8; # data.frame(x, y, w): 오류 출력 (row의 수가 다르기 때문.)

데이터 프레임의 속성

  • is.data.frame()은 주어진 객체가 데이터 프레임인지 확인. as.data.frame()은 주어진 객체를 데이터 프레임화.
  • nrow(), ncol(), dim() : 각각 행의 길이, 열의 길이, 차원을 반환.
  • names() : 변수명 확인


is.data.frame(test)
## [1] TRUE
is.data.frame(z) 
## [1] FALSE
z_data_frame <- as.data.frame(z) # 행렬 z를 데이터 프레임화 
is.data.frame(z_data_frame)
## [1] TRUE
dim(test); nrow(test); ncol(test) #차원, 행 갯수, 열 갯수
## [1] 7 4
## [1] 7
## [1] 4
rownames(test) # 행 이름 출력
## [1] "1" "2" "3" "4" "5" "6" "7"
colnames(test) <- c("first", "second", "third", "fourth") # 열 이름 지정
head(test); tail(test) # 데이터 프레임 일부만 출력. cf. head(test, n = k)으로 k번째까지 출력한다는 옵션 지정 가능. 
##   first second third fourth
## 1     1      A    11     18
## 2     2      B    12     19
## 3     3      C    13     20
## 4     4      D    14     21
## 5     5      E    15     22
## 6     6      F    16     23
##   first second third fourth
## 2     2      B    12     19
## 3     3      C    13     20
## 4     4      D    14     21
## 5     5      E    15     22
## 6     6      F    16     23
## 7     7      G    17     24

데이터 프레임의 인덱스

  • 벡터, 행렬에서 하는 것처럼 대괄호[]를 사용하여 인덱스를 지정할 수 있다.
    • data_frame_name$component_name
num <- 1:5
char <- letters[1:5]
nat <- c("USA", "Japan", "China", "Russia", "South Korea")
df <- data.frame(obs = num, letter = char, nation = nat)

df$nation # nation 열에 포함된 데이터 모두 출력 
## [1] USA         Japan       China       Russia      South Korea
## Levels: China Japan Russia South Korea USA
df[1, 2] # 1번째 행, 2번째 열의 데이터 
## [1] a
## Levels: a b c d e
df[, 3]
## [1] USA         Japan       China       Russia      South Korea
## Levels: China Japan Russia South Korea USA
df[, 2:3]
##   letter      nation
## 1      a         USA
## 2      b       Japan
## 3      c       China
## 4      d      Russia
## 5      e South Korea
df[1:3, ]
##   obs letter nation
## 1   1      a    USA
## 2   2      b  Japan
## 3   3      c  China
class(df[, "nation"]) 
## [1] "factor"
df[, c("letter", "nation")]
##   letter      nation
## 1      a         USA
## 2      b       Japan
## 3      c       China
## 4      d      Russia
## 5      e South Korea
nat1 <- df[, "nation", drop = FALSE] # drop = FALSE 옵션: 데이터 프레임 반환 지정
nat2 <- df[, "nation"] # drop = FALSE가 없으면 벡터 반환 

리스트

  • 리스트는 여러 데이터 객체들을 한꺼번에 자유롭게 취급할 수 있는 데이터 유형이다.
    • 벡터, 행렬, 데이터 프레임, 그리고 리스트 자신도 요소가 될 수 있다.
  • list() 이용
  • name(): 이름 할당 가능
mat <- matrix(1:6, nrow = 2, ncol = 3)
list1 <- list(c(1:3), mat, c("a", "b", "c"), 5:8); list1
## [[1]]
## [1] 1 2 3
## 
## [[2]]
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
## 
## [[3]]
## [1] "a" "b" "c"
## 
## [[4]]
## [1] 5 6 7 8
list2 <- list(list1, df); list2 # 데이터 프레임도 요소로 취급 가능 
## [[1]]
## [[1]][[1]]
## [1] 1 2 3
## 
## [[1]][[2]]
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
## 
## [[1]][[3]]
## [1] "a" "b" "c"
## 
## [[1]][[4]]
## [1] 5 6 7 8
## 
## 
## [[2]]
##   obs letter      nation
## 1   1      a         USA
## 2   2      b       Japan
## 3   3      c       China
## 4   4      d      Russia
## 5   5      e South Korea
names(list1) <- c("A", "B", "C", "D"); list1
## $A
## [1] 1 2 3
## 
## $B
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
## 
## $C
## [1] "a" "b" "c"
## 
## $D
## [1] 5 6 7 8
  • 리스트 인덱싱은?
list1[[1]]
## [1] 1 2 3
list2[[2]]
##   obs letter      nation
## 1   1      a         USA
## 2   2      b       Japan
## 3   3      c       China
## 4   4      d      Russia
## 5   5      e South Korea
list2[[2]]$nation
## [1] USA         Japan       China       Russia      South Korea
## Levels: China Japan Russia South Korea USA
list2[[2]][1] # 하위 요소 출력
##   obs
## 1   1
## 2   2
## 3   3
## 4   4
## 5   5
list2[["New"]] <- c(1:10)
list2
## [[1]]
## [[1]][[1]]
## [1] 1 2 3
## 
## [[1]][[2]]
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
## 
## [[1]][[3]]
## [1] "a" "b" "c"
## 
## [[1]][[4]]
## [1] 5 6 7 8
## 
## 
## [[2]]
##   obs letter      nation
## 1   1      a         USA
## 2   2      b       Japan
## 3   3      c       China
## 4   4      d      Russia
## 5   5      e South Korea
## 
## $New
##  [1]  1  2  3  4  5  6  7  8  9 10
length(list2)
## [1] 3
  • 요소를 호출할 때 $name 을 쓰지 않기 위해서는? attach() 사용
    • 단 요소들의 이름이 모두 지정되어 있어야 한다.
# attach(list2) : 에러 출력 

names(list2) <- c("n1", "n2", "n3"); attach(list2)
## The following objects are masked from list2 (pos = 3):
## 
##     n1, n2, n3
## The following objects are masked from list2 (pos = 4):
## 
##     n1, n2, n3
## The following objects are masked from list2 (pos = 5):
## 
##     n1, n2, n3
## The following objects are masked from list2 (pos = 6):
## 
##     n1, n2, n3
n1; n2; n3
## [[1]]
## [1] 1 2 3
## 
## [[2]]
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
## 
## [[3]]
## [1] "a" "b" "c"
## 
## [[4]]
## [1] 5 6 7 8
##   obs letter      nation
## 1   1      a         USA
## 2   2      b       Japan
## 3   3      c       China
## 4   4      d      Russia
## 5   5      e South Korea
##  [1]  1  2  3  4  5  6  7  8  9 10
# detach() 명령어: attach 취소