산술 연산자 (역 따옴표)가 마치 산술 함수처럼 작동하는 경우가 있습니다.산술 연산자가 산술 함수보다 선호 되는가?
연산기 :
> `+`(4, 5)
[1] 9
연산 함수 :
> sum(4, 5)
[1] 9
그러나 연산기 일반적인 산술 함수 같은 벡터를 통해이를 않는다 :
> `+`(1:5)
[1] 1 2 3 4 5
적이 있는가 산술 연산자가 산술 기능보다 더 좋은 모든 인스턴스 엔?
산술 연산자 (역 따옴표)가 마치 산술 함수처럼 작동하는 경우가 있습니다.산술 연산자가 산술 함수보다 선호 되는가?
연산기 :
> `+`(4, 5)
[1] 9
연산 함수 :
> sum(4, 5)
[1] 9
그러나 연산기 일반적인 산술 함수 같은 벡터를 통해이를 않는다 :
> `+`(1:5)
[1] 1 2 3 4 5
적이 있는가 산술 연산자가 산술 기능보다 더 좋은 모든 인스턴스 엔?
제목의 질문에, 나는 일반적으로 또는 일반적으로 말할 것입니다. R에서 우리는 대개 동일한 경우 또는 주제의 일부라는 의미에서 벡터의 값의 순서를 병렬로 열 또는 벡터로 작업합니다. 당신의 예에서 당신은 실제로 행동 세 가지 다른 기능을보고있다 :
첫째 :
> `+`(-3:3)
[1] -3 -2 -1 0 1 2 3
> `+`(c(TRUE,FALSE))
[1] 1 0
: 숫자 벡터를 제공하지만, 논리적 벡터를 제공 할 때 숫자에 강제 할 것입니다 때 기본적으로 아무것도하지 않는 단항 '+'연산자
이 아니며이 반환 값의 모든 값을 주석 중 하나에 명시된 것처럼 양수로 만듭니다.
다음 : 이진 '+'연산자
> `+`(-3:3, 0:6)
[1] -3 -1 1 3 5 7 9
마지막 :
> sum(-3:3, 0:6, c(TRUE,FALSE))
[1] 22
: _not_vectorized_이다 그들의 조합의 합계 값을 모두 축소 할 sum
함수 이진 +
은 (경고와 함께) 인수를 재활용합니다.
> `+`(-3:3, c(TRUE,FALSE))
[1] -2 -2 0 0 2 2 4
Warning message:
In -3:3 + c(TRUE, FALSE) :
longer object length is not a multiple of shorter object length
"병렬로"벡터에서 작업 할 때 종종 벡터화 된 연산자를 사용하고 길이 1의 값만 반환 할 수있는 sum 결과에 매우 실망합니다. 함수 인수에 의존하는 outer
과 같은 일부 함수는 다음을 필요로합니다. 함수가 벡터화되어야합니다.
> outer(1:4, 5:8, sum)
Error in outer(1:4, 5:8, sum) :
dims [product 16] do not match the length of object [1]
> outer(1:4, 5:8, "+")
[,1] [,2] [,3] [,4]
[1,] 6 7 8 9
[2,] 7 8 9 10
[3,] 8 9 10 11
[4,] 9 10 11 12
다른 경우에는 단일 값이 반환되어야합니다. 그리고 'mapply'와 같은 몇몇 사람들은 그 주제에 대해 불가지론 자입니다.
> mapply(sum, 1:4, 5:8)
[1] 6 8 10 12
> mapply("+", 1:4, 5:8)
[1] 6 8 10 12
Vectorize
mapply
을 사용하고 있지만,이 인수 이름을 사용하지 않기 때문에 그것은 비 기본 기능으로 제한됩니다 (따라서
sum
을 벡터화 할 수 없습니다.)
?Syntax
을 참조하여 R 우선 순위 규칙을 얻을 수있는 우선 순위가 다를 수 있습니다. (단항 연산자는 이진 연산자보다 우선 순위가 높습니다.함수와 괄호가 암시 적으로 우선 순위가 가장 높습니다. 나는 사용자 정의 함수의 더 높은 우선 순위 때문에 놀라움이 있었던 상황을 보았습니다.)
이 질문을 이해할 수 없습니다. 단항'+'연산자 (이항 연산자와 같지 않음)는 문서화 된대로 동작합니다. 왜 그것이'sum'처럼 행동 할 것이라고 기대합니까? – Roland
@Roland,'+ '가이 경우 단항 연산자 인 경우 하나의 피연산자만을 취하며 합계보다 작습니다. –