2014-11-06 6 views
1

R의 내부에 대한 질문입니다. 다음 호가 어떻게 작동하는지 설명 할 수 있다면 궁금합니다.R이 정수에서 행렬을 빼는 방법

# Let's just work with part of the iris data 
data(iris) 
df <- iris[1:10, 1:4] 

# Now the question 
1 - df 

R은 동일한 크기의 다른 매트릭스를 생성합니까? 모든 요소를 ​​반복합니까? R은 정수에서 행렬을 어떻게 빼는가?

답변

2

귀하의 예는 매트릭스가 아니라 data.frame입니다. 나는 data.frame 케이스를 참조 할 것이다.

S3 메서드는 Ops 그룹 일반 (methods("Ops") 참조)으로 전달됩니다. 관련 방법은 Ops.data.frame입니다. 다음 날 부가 코멘트 일부 발췌 :

인수 경우
#create an unevaluated function call 
FUN <- get(.Generic, envir = parent.frame(), mode = "function") 
f <- if (unary) 
    quote(FUN(left)) 
else quote(FUN(left, right)) 

#... 
#a lot of checking and preparations 
#... 

#loop over the columns, create the function input and evaluate the function call 
    for (j in seq_along(cn)) { 
     left <- if (!lscalar) 
      e1[[j]] 
     else e1 
     right <- if (!rscalar) 
      e2[[j]] 
     else e2 
     value[[j]] <- eval(f) 
    } 

정수 벡터 및 정수 행렬 인 -에 모두 정수 벡터로 처리되고,하지만 .Primitive("-")dim 포함하는 속성을 유지 매트릭스의 공헌. help("-")을 참조하십시오.

+0

감사합니다. data.frame을 (를) 감독하십시오. data.frame과 행렬의 함수간에 중요한 차이가 있습니까? 아니면 코드가 본질적으로 동일합니까? 나는'Ops.matrix' 메소드를 찾지 못했습니다. – cdeterman

+0

내 대답의 마지막 부분을 읽으십시오. 이 경우에는 S3 방법이 없습니다. '.Primitive' 함수에 의해 처리됩니다. – Roland