Como reciclar Argumentos em R

Cada vez, você combina um vetor com valores múltiplos e um com um único valor em uma função. R aplica a função, usando esse valor único para cada valor no vetor. Mas a reciclagem vai muito além destes exemplos.

Qualquer vez que você dá dois vetores com comprimentos desiguais para uma função de reciclagem, R repete o vetor mais curto quantas vezes for necessário para levar a cabo a tarefa que você pediu que ele execute.

Suponha que você dividir o número de cestas Granny feitas em-dois ponteiros e de três pontos:

> Granny.pointers lt; - C (10, 2, 4, 0, 4, 1, 4, 2, 7, 2, 1, 2)

Está providenciar os números, de tal modo que, para cada jogo, em primeiro lugar o número de-dois ponteiros é dado, seguido pelo número de três ponteiros.

Agora Granny quer saber quantos pontos ela está realmente marcou nesta temporada. Você pode calcular isso facilmente com a ajuda de reciclagem:

> pontos de lt; - Granny.pointers * C (2, 3)> pontos [1] 20 6 8 0 8 3 8 6 14 6 2 6> sum (pontos) [1] 87

Agora, o que você faz aqui?

  1. Você fez um vetor com o número de pontos para cada cesta:

    C (2, 3)
  2. Você disse a R multiplicar esse vector pelo vetorGranny.pointers.

    R multiplicado o primeiro número Granny.pointers por 2, a segunda por 3, a terceira por 2 novamente, e assim por diante.

  3. Você coloca o resultado na variável pontos.

  4. Você resumiu todos os números em pontos para obter o número total de pontos marcados.

Na verdade, você pode simplesmente deixar de fora Passo 3. O aninhamento de funções permite que você faça isso em uma linha de código:

> Sum (Granny.pointers * C (2, 3))

A reciclagem pode ser um pouco complicado. Se o comprimento do vector já não é exactamente um múltiplo do comprimento do vector mais curto, é possível obter resultados inesperados.

Agora Granny quer saber o quanto ela melhorou a cada jogo. Ser preguiçoso, você tem um plano astuto. Com diff (), você calcular quantos mais ou menos cestas Granny fez do que ela fez no jogo antes. Então você usa a divisão vectorized para dividir estas diferenças, o número de cestas no jogo. Para finalizar, você multiplicar por 100 e toda a volta do vetor. Todos estes cálculos têm uma linha de código:

> Round (diff (baskets.of.Granny) / baskets.of.Granny * 100) 1º 2º 3º 4º 5º 6º-67 25 20 50 -67 -267

Esse último valor não parece certo, porque é impossível a marcar mais de 100 por cento menos cestas. R não apenas dar-lhe que result- estranho ele também avisa que o comprimento diff (baskets.of.Granny) não se encaixa no período de baskets.of.Granny:

Mensagem de aviso: Em diff (baskets.of.Granny) / baskets.of.Granny: comprimento mais longo objeto não é um múltiplo de menor comprimento de objeto

o vetor baskets.of.Granny é seis valores de comprimento, mas o resultado de diff (baskets.of.Granny) está a apenas cinco valores de comprimento. Assim, a diminuição de 267 por cento é, de facto, o último valor de baskets.of.Granny dividido por o primeiro valor de diff (baskets.of.Granny). Neste exemplo, o vector mais curto, diff (baskets.of.Granny), é reciclado pelo operador de divisão.

Esse resultado não foi o que você pretende. Para evitar esse resultado, você deve usar apenas os primeiros cinco valores de baskets.of.Granny, de modo que o comprimento de ambos os vectores de jogo:

> Round (diff (baskets.of.Granny) / baskets.of.Granny [1: 5] * 100) 2º 3º 4º 5º 6º-67 25 20 50 -67

E tudo o que é vetorização.

menu