terça-feira, 4 de dezembro de 2018

Guia rápido de R

Onde obter o R

https://www.r-project.org/

Instalação do R no Ubuntu/Debian:

sudo apt-get install r-base

Executando o R:

Digite r na linha de comando  (ou r.exe no Windows)

Obtendo ajuda

help([NOME DA FUNÇÃO])
help("[NOME DA FUNÇÃO]") // quando houver caracteres especiais
help.start() // abre a ajuda no navegador web padrão


Executando comandos armazenados em um arquivo

source("[NOME DO ARQUIVO]") // o arquivo deve ter a extensão R

Desviando a saída do console para um arquivo externo

sink("[NOME DO ARQUIVO]")
sink() // sem argumento restaura a saída para o console


Vendo objetos da sessão R

objects()

Removendo objetos da sessão R

rm([OBJETO1],[OBJETO2],...,[OBJETON])

Associando um vetor a um objeto



ou

c([VALOR1],[VALOR2],...,[VALORN]) -> x

ou

assign("x",c([VALOR1],[VALOR2],...,[VALORN]))

Se um valor passado como argumento para a função c for um vetor, o resultado não será um vetor multidimensional (uma matriz). Os valores do elemento vetor serão inseridos no vetor resultado, na ordem em que foram definidos. Assim, se x é o vetor gerado por c(10.4, 5.6, 3.1, 6.4, 21.7), y definido por c(x,0,x) será igual a:

10.4 5.6 3.1 6.4 21.7 0.0 10.4 5.6 3.1 6.4 21.7

Ou seja, todos os elementos de x, depois o 0, e novamente os elementos de x.

Aritmética de vetor

R permite a soma de vetores, inclusive de comprimentos diferentes. No caso da diferença de tamanho, o cálculo é feito até o último elemento do vetor maior, repetindo os elementos do vetor menor quando terminam.

Por exemplo, imagine o vetor x com 5 elementos assim definido:

c(10.4, 5.6, 3.1, 6.4, 21.7) -> x

E o vetor y, com 11 elementos, assim definido:

y 10.4 5.6 3.1 6.4 21.7 0.0 10.4 5.6 3.1 6.4 21.7

Se criarmos um vetor v combinando x e y desta forma:



O cálculo de cada elemento de v será feito desta forma:

v[1] = 2 * x[1] + y[1] + 1
v[2] = 2 * x[2] + y[2] + 1
v[3] = 2 * x[3] + y[3] + 1
v[4] = 2 * x[4] + y[4] + 1
v[5] = 2 * x[5] + y[5] + 1
v[6] = 2 * x[1] + y[6] + 1
v[7] = 2 * x[2] + y[7] + 1
v[8] = 2 * x[3] + y[8] + 1
v[9] = 2 * x[4] + y[9] + 1
v[10] = 2 * x[5] + y[10] + 1
v[11] = 2 * x[1] + y[11] + 1


Gerando sequências

Para gerar uma sequência de inteiros de 1 a 30:

s = 1:30

Para gerar uma sequência decrescente de 30 a 1:

s = 30:1

Você pode usar uma variável para definir um dos limites de uma sequência. Assim se você define n com valor 10:



Você pode criar uma sequência de 1 a 10 assim:

s = 1:n

Você pode criar uma sequência com a função seq(). Existem dois formatos:

seq([ELEMENTO INICIAL],[ELEMENTO FINAL],by=[DIFERENÇA COMUM OU RAZÃO]) 

seq(length=[QUANTIDADE DE ELEMENTOS],from=[ELEMENTO INICIAL],by=[DIFERENÇA COMUM OU RAZÃO])

Você pode criar uma sequência a partir da repetição de elementos de um vetor. Existem duas possibilidades, repetir um vetor n vezes ou repetir n vezes os elementos de um vetor. Isso é feito com a função rep(), assim:

rep([VETOR],times=[NUMERO DE VEZES QUE O VETOR SERÁ REPETIDO])

rep([VETOR],each=[NUMERO DE VEZES QUE CADA ELEMENTO DO VETOR SERÁ REPETIDO])

Sendo assim, consideremos o vetor fibonacci assim definido:

fibonacci = c(1,1,2,3,5,8,13,21)

Podemos gerar um vetor que repita fibonacci três vezes, assim:

trifibonacci = rep(fibonacci, times=3)

trifibonacci terá o seguinte conteúdo:

1 1 2 3 5 8 13 21 1 1 2 3 5 8 13 21 1 1 2 3 5 8 13 21

E podemos gerar outro vetor repetindo cada elemento de fibonacci três vezes, assim:

fibonaccigago = rep(fibonacci, each=3)

fibonaccigago terá o seguinte conteúdo:

1 1 1 1 1 1 2 2 2 3 3 3 5 5 5 8 8 8 13 13 13 21 21 21

Vetores lógicos

É possível gerar um novo vetor com elementos booleanos a partir de um vetor numérico existente usando condições lógicas.
Por exemplo, o vetor pares, assim definido:

pares 

Pode gerar o vetor menorquesete, assim definido:

menorquesete 

Que terá o seguinte conteúdo:

TRUE TRUE TRUE FALSE FALSE

Valores ausentes

NaN indica que o resultado de uma operação não é um número, o que significa que essa operação não está definido para os números envolvidos.
Inf indica o infinito, ou o limite de 1/x quando x tende a 0.

Abaixo seguem os resultados de algumas operações envolvendo as constantes NaN e Inf.

0/0 : NaN
1/0: Inf
Inf/Inf: NaN
1/Inf: 0
Inf/0: Inf

Vetores de caracteres

A função paste permite gerar um vetor de caracteres a partir de outro, pela colagem de cada um dos elementos do vetor de origem aos elementos de uma sequência numérica intermediados por um caractere separador. Se o vetor de origem for menor que a sequência, seus elementos serão repetidos até que o tamanho case com a sequência.
Assim, o seguinte exemplo de uso da função paste():

labs 

Irá gerar o seguinte vetor:

"X1"  "Y2"  "X3"  "Y4"  "X5"  "Y6"  "X7"  "Y8"  "X9"  "Y10"

Vetores indexados

É possível selecionar subconjuntos de um vetor usando índices entre colchetes. Os índices podem ser condições (expressões lógicas), quantidades integrais positivas, quantidade integrais negativas (um conjunto diferença) e cadeias de caracteres.

Expressões lógicas

y <- x[!is.na(x)]
y é o subconjunto de x onde cada elemento retorna falso quando passado como argumento para a função is.na()

Quantidades integrais positivas

z <- x[1:10]

z é o subconjunto dos dez primeiros elementos de x

Quantidades integrais negativas

k <- x[-(1:5)]

k é o subconjunto de todos os elementos de x exceto os cinco primeiros.

Cadeias de caracteres

Para atribuir nomes a elementos de um vetor, use a função names(), recebendo o vetor de nomes. Assim, supondo um vetor numérico fruit assim:

fruit <- c(5, 10, 1, 20)

É possível atribuir nomes aos elementos desta forma:

names(fruit) <- c(“orange”, “banana”, “apple”, “peach”)

E um subconjunto do vetor resultado pode ser selecionado usando os nomes dos elementos, assim:

lunch <- fruit[c(“apple”,”orange”)]

Gerando de novos vetores a partir de funções

Um novo vetor pode ser gerado a partir de um existente pela aplicação de uma função a cada um de seus elementos. Para isso basta passar o vetor de origem como argumento para a função. Ela retornará um vetor em que cada elemento será o resultado da chamada a própria função com a passagem do elemento como argumento.

Se criarmos um vetor y assim:

y = c(-1,2,-3,4,-5,6,-7,8,-9,10)

Após sobrescrevê-lo assim:

y <- abs(y)

Seu conteúdo será apenas de inteiros positivos.

Alternado o comprimento de um objeto

É possível truncar o tamanho de um objeto usando os índices. Assim, para limitar um objeto alpha aos seus primeiro cinco elementos fazemos assim:

alpha <- alpha[1:5]

Também é possível limitar o tamanho usando a função length(), assim:

length(alpha) <- 5

É possível selecionar elementos alternados criando uma expressão numérica. Por exemplo, para selecionar apenas os elementos com índices pares dos cinco primeiros elementos:

alpha <- alpha[2 * 1:5]

Ordenação de vetores

É possível ordenar um vetor e eliminar os elementos repetidos usando as funções factor() e levels().
Consideremos um vetor que contém siglas repetidas dos estados e territórios da Austrália, correspondentes a uma amostra de auditores fiscais australianos:

state <- c(“tas”, “sa”, “qld”, “nsw”, “nsw”, “nt”, “wa”, “wa”,”qld”, “vic”, “nsw”, “vic”, “qld”, “qld”, “sa”, “tas”,”sa”, “nt”, “wa”, “vic”, “qld”, “nsw”, “nsw”, “wa”,”sa”, “act”, “nsw”, “vic”, “vic”, “act”)

Com a função factor(), podemos gerar um objeto que contém os mesmos dados do vetor acrescido da propriedade levels, que contém um vetor com os elementos ordenados sem repetição. Assim, se criarmos um novo objeto assim:

statef <- factor(state)

O objeto statef conterá o vetor state e uma propriedade levels, que é um vetor com os elementos de state ordenados, sem repetição.

Para obter apenas o vetor ordenado, use a função levels():

levels(statef)

Cálculo de média aritmética sobre elementos de vetores

É possível calcular as médias aritméticas de conjuntos de valores classificados por rótulos. Se você possui um vetor com os rótulos e outro vetor com os valores associados aos rótulos, na mesma ordem, você pode obter um novo vetor com as médias usando a função tapply().

Suponha que haja um vetor com valores de impostos arrecadados por auditores fiscais australianos, que casa justamente com o vetor state citado anteriormente:

incomes <- c(60, 49, 40, 61, 64, 60, 59, 54, 62, 69, 70, 42, 56, 61, 61, 61, 58, 51, 48, 65, 49, 49, 41, 48, 52, 46, 59, 46, 58, 43)

Para obter a média de valor arrecadado por estado, usamos a função tapply, passando o vetor de valores como primeiro argumento, o vetor gerado pela função factor() como segundo argumento e a função mean() (sem os parênteses) como terceiro argumento.

incmeans <- tapply(incomes, statef, mean)

Isso produzirá com vetor com as médias de cada estado:

act    nsw    nt     qld    as     tas    vic
44.500 57.333 55.500 53.600 55.000 60.500 56.000
wa
52.250

sexta-feira, 11 de maio de 2018

Roteiro para chaves PGP usando GIT no Debian

https://github.com/nextcloud/server/wiki/How-to-sign-your-commits-using-PGP

https://keyring.debian.org/creating-key.html

https://www.vivaolinux.com.br/topico/OTRS/Assinar-mensgens-com-o-gpg-(PGP)

sexta-feira, 26 de janeiro de 2018

GIT: juntando commits

Às vezes, para implementar uma funcionalidade, é preciso fazer vários commits, mas no final você só precisa de um, com todas as mudanças.

Para juntar vários commits, use o comando git rebase, neste formato:

git rebase -i [branch]~[numero de commits]

Por exemplo, se você quiser juntar os três ultimos commits do branch issue2814

git rebase -i issue2814~3
 
Será aberto um editor com os commits.Substitua a palavra pick por squash a partir da segunda linha, para que os commits anteriores sejam mesclados ao último.

Após salvar o arquivo com as mudanças, será aberto o commit único, para alteração dos comentários.