수색…
변수, 데이터 구조 및 기본 작업
R에서 데이터 객체는 명명 된 데이터 구조를 사용하여 조작됩니다. 객체의 이름은 공식 R 문서에서 특별한 의미가 없지만 "변수"라고 할 수 있습니다. R 이름은 대소 문자를 구분 하며 영숫자 ( az
, Az
, 0-9
), 점 / 마침표 ( .
) 및 밑줄 ( _
)을 포함 할 수 있습니다. 데이터 구조의 이름을 만들려면 다음 규칙을 따라야합니다.
숫자 또는 밑줄 (예 :로 시작하는 이름
1a
), 또는 이름 유효 숫자 표현식 (예이다.11
) 또는 이름 대시 - 그들이 인용하는 경우 ( '') 또는 공백은 사용할 수 있습니다 :`1a`
와`.11`
. 이름은 backticks로 인쇄됩니다 :list( '.11' ="a") #$`.11` #[1] "a"
영숫자, 점 및 밑줄의 다른 모든 조합은 자유롭게 사용할 수 있습니다. 여기서 백틱이 있거나없는 참조는 동일한 객체를 가리 킵니다.
이름은로 시작합니다
.
시스템 이름으로 간주되며ls()
-function을 사용하여 항상 볼 수있는 것은 아닙니다.
변수 이름의 문자 수에는 제한이 없습니다.
유효한 객체 이름의 몇 가지 예는 다음과 같습니다. foobar
, foo.bar
, foo_bar
, .foobar
R에서 변수는 중위 어사 입 연산자 <-
사용하여 값이 할당됩니다. 연산자 =
는 변수에 값을 할당하는 데에도 사용할 수 있지만 함수 호출에서 매개 변수 이름과 값을 연결하는 데 적절합니다. 운영자 주위에 공백을 생략하면 사용자에게 혼란을 줄 수 있습니다. 표현식 a<-1
은 논리 비교 ( a < -1
)가 아닌 할당 ( a <- 1
)으로 분석됩니다.
> foo <- 42
> fooEquals = 43
그래서 foo
에는 42
의 값이 할당됩니다. 콘솔 내에서 foo
를 입력 fooEquals
42
가 출력되고, fooEquals
를 입력하면 43
이 출력됩니다.
> foo
[1] 42
> fooEquals
[1] 43
다음 명령은 x
라는 변수에 값을 할당하고 동시에 값을 인쇄합니다.
> (x <- 5)
[1] 5
# actually two function calls: first one to `<-`; second one to the `()`-function
> is.function(`(`)
[1] TRUE # Often used in R help page examples for its side-effect of printing.
->
사용하여 변수에 대입 할 수도 있습니다.
> 5 -> x
> x
[1] 5
>
데이터 구조의 유형
R에는 스칼라 데이터 형식이 없습니다. 길이가 1 인 벡터는 스칼라처럼 작동합니다.
- 벡터 : 원자 벡터는 같은 클래스의 물체의 연속이어야합니다. : 일련의 숫자 또는 일련의 논리 또는 일련의 문자.
v <- c(2, 3, 7, 10)
v2 <- c("a", "b", "c")
는 모두 벡터입니다. - 행렬 : 숫자, 논리 또는 문자의 행렬입니다.
a <- matrix(data = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), nrow = 4, ncol = 3, byrow = F)
벡터와 마찬가지로 행렬도 같은 클래스의 요소로 만들어야합니다. 행렬에서 요소를 추출하려면 행과 열을 지정해야합니다.a[1,2]
는 첫 번째 행, 두 번째 열의 요소 인[1] 5
를 반환합니다. - 목록 : 다른 요소의 연결
mylist <- list (course = 'stat', date = '04/07/2009', num_isc = 7, num_cons = 6, num_mat = as.character(c(45020, 45679, 46789, 43126, 42345, 47568, 45674)), results = c(30, 19, 29, NA, 25, 26 ,27) )
. 목록에서 요소를 추출하는 작업은 이름 (목록의 이름 인 경우) 또는 색인을 사용하여 수행 할 수 있습니다. 주어진 예제에서mylist$results
와mylist[[6]]
는 같은 원소를 얻습니다. 경고 :mylist[6]
를 시도하면 R은 오류가 없지만 결과를 목록으로 추출합니다.mylist[[6]][2]
는 허용되지만 (19 번을줍니다),mylist[6][2]
는 여러분에게 오류를줍니다. - data.frame : 길이가 같지만 가능하면 다른 유형의 벡터 인 열이있는 객체. 그것들은 행렬이 아닙니다.
exam <- data.frame(matr = as.character(c(45020, 45679, 46789, 43126, 42345, 47568, 45674)), res_S = c(30, 19, 29, NA, 25, 26, 27), res_O = c(3, 3, 1, NA, 3, 2, NA), res_TOT = c(30,22,30,NA,28,28,27))
. 열은 이름exam$matr
,exam[, 'matr']
또는 색인exam[1]
,exam[,1]
로 읽을 수 있습니다. 행은 이름exam['rowname', ]
또는 색인exam[1,]
통해 읽을 수도 있습니다. 데이터 프레임은 실제로 특정 구조 (rownames-attribute 및 길이가 동일한 구성 요소)가있는 목록 일뿐입니다.
일반적인 작업과주의 사항
기본 작업은 요소별로 수행됩니다. 연산자 우선 순위 규칙 ?Syntax
을 참조하십시오. 대부분의 연산자 (및 기본 R의 다른 함수)에는 길이가 다른 인수를 허용하는 재활용 규칙이 있습니다. 이러한 객체가 주어질 때 :
예제 객체
> a <- 1
> b <- 2
> c <- c(2,3,4)
> d <- c(10,10,10)
> e <- c(1,2,3,4)
> f <- 1:6
> W <- cbind(1:4,5:8,9:12)
> Z <- rbind(rep(0,3),1:3,rep(10,3),c(4,7,1))
일부 벡터 작업
> a+b # scalar + scalar
[1] 3
> c+d # vector + vector
[1] 12 13 14
> a*b # scalar * scalar
[1] 2
> c*d # vector * vector (componentwise!)
[1] 20 30 40
> c+a # vector + scalar
[1] 3 4 5
> c^2 #
[1] 4 9 16
> exp(c)
[1] 7.389056 20.085537 54.598150
일부 벡터 작동 경고!
> c+e # warning but.. no errors, since recycling is assumed to be desired.
[1] 3 5 7 6
Warning message:
In c + e : longer object length is not a multiple of shorter object length
R은 할 수있는 것을 합친 다음 더 짧은 벡터를 재사용하여 공백을 채 웁니다. 두 벡터의 길이가 정확히 배수가 아니기 때문에 경고가 주어졌습니다. c + f # 아무런 경고가 없습니다.
일부 매트릭스 작동 경고!
> Z+W # matrix + matrix #(componentwise)
> Z*W # matrix* matrix#(Standard product is always componentwise)
행렬 곱하기를 사용하려면 : V % * % W
> W + a # matrix+ scalar is still componentwise
[,1] [,2] [,3]
[1,] 2 6 10
[2,] 3 7 11
[3,] 4 8 12
[4,] 5 9 13
> W + c # matrix + vector... : no warnings and R does the operation in a column-wise manner
[,1] [,2] [,3]
[1,] 3 8 13
[2,] 5 10 12
[3,] 7 9 14
[4,] 6 11 16
'비공개'변수
R에있는 변수 또는 함수의 이름에서 첫 번째 점은 일반적으로 변수 또는 함수가 숨겨지기위한 것임을 나타 내기 위해 사용됩니다.
따라서 다음 변수를 선언하십시오.
> foo <- 'foo'
> .foo <- 'bar'
그리고 ls
함수를 사용하여 객체를 나열하면 첫 번째 객체 만 표시됩니다.
> ls()
[1] "foo"
그러나 all.names = TRUE
를 함수에 전달하면 'private'변수가 표시됩니다.
> ls(all.names = TRUE)
[1] ".foo" "foo"