수색…


변수, 데이터 구조 및 기본 작업

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$resultsmylist[[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"   


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow