Como usar o Aplicar família de funções em P

utilização para

ansas tem alguns efeitos colaterais muito importantes. Os objetos criados na para loop de ficar na área de trabalho depois. Objetos de alterar na para ciclo forem alterados na área de trabalho. Embora isso possa ser as intenções para alguns, para outros, este é um efeito colateral indesejado do caminho para loops são implementadas em R.

Dê uma olhada no exemplo a seguir:

> Songline lt; - 'Saia dos meus sonhos ... "> para (Songline em 1: 5) print (' ... Entre no meu carro!")

Ao contrário do que você pode esperar, depois de executar este código, o valor de Songline Não é a cadeia 'Saia dos meus sonhos ...', mas o número 5, como mostrado na saída abaixo:

> Songline [1] 5

Embora você nunca mudou explicitamente o valor de Songline em qualquer lugar do código, R fá-lo implicitamente quando a realização do para loop. Cada iteração, R atribui novamente o valor seguinte a partir do vector de Songline . . . no espaço de trabalho!

Ao escolher os nomes das variáveis ​​e o identificador de forma inteligente, você pode evitar correr em apuros. Ao escrever scripts grandes, você precisa fazer alguma contabilidade sério para os nomes para evitar erros.

Para ser completamente correto, usando um para laço tem um efeito sobre o ambiente em que trabalha naquele momento. Se você usar apenas o para loop no scripts que são executados no console, os efeitos terá lugar no espaço de trabalho. Se você usar um para lacete no corpo da função, os efeitos terá lugar dentro do meio ambiente do que a função.

Aqui está a boa notícia: R tem outro sistema de looping que é muito poderoso, que é pelo menos tão rápido quanto para loops (e, por vezes, muito mais rápido), e - mais importante - que não têm os efeitos colaterais de um para loop. Na verdade, este sistema é constituído por uma família completa de funções relacionadas, conhecido como o aplicar família. Esta família contém sete funções, todas terminando com aplicar.

As características da família

Antes de começar a usar qualquer uma das funções da família aplicar, aqui estão as propriedades mais importantes destas funções:

  • Cada uma das funções aplicam leva pelo menos dois argumentos: um objeto e uma outra função. Você passa a função como um argumento.

  • Nenhum destes aplicar funções tem efeitos colaterais. Esta é a principal razão para usá-los !: Se você pode usar qualquer aplicar a função em vez de uma para laço, utilizar a solução de aplicar. Esteja ciente de que os possíveis efeitos colaterais da aplicado função não são atendidos pela família aplica.

  • Cada função se aplicam pode passar argumentos para a função que é dado como um argumento. Ele faz isso utilizando o pontos argumento.

  • Cada função da família aplicam sempre retorna um resultado. Usando a família se aplicam só faz sentido se você precisa que o resultado. Se você deseja imprimir mensagens para o console com impressão() ou gato() por exemplo, utilizando a família aplicar é desnecessária.

Conheça três dos membros

Diga olá para aplicar(), sapply (), e lapply (), os membros mais utilizados da família aplicar. Cada uma destas funções se aplica outra função para todos os elementos em um objeto. O que esses elementos são depende do objeto ea função.

Nome funçãoObjetos da função trabalha comQual a função Vê como elementosTipo de resultado
aplicarMatrizLinhas ou colunasVetor, matriz, matriz ou lista
ordemLinhas, colunas, ou qualquer dimensãoVetor, matriz, matriz ou lista
Quadro de dadosLinhas ou colunasVetor, matriz, matriz ou lista
sapplyVetorelementosVetor, matriz ou lista
Quadro de dadosvariáveisVetor, matriz ou lista
ListaelementosVetor, matriz ou lista
lapplyVetorelementosLista
Quadro de dadosvariáveisLista
ListaelementosLista

menu