[R-br] problema com for loop

Vitor Aguiar vitor.aguiar em me.com
Segunda Março 12 00:18:46 BRT 2012


Boa noite a todos.
Sou novo em programação e estou tentando montar um for loop, então gostaria de pedir ajuda aos que estão familiarizados com isso. A explicação abaixo é longa, mas há poucos códigos de programação.
Desde já agradeço aos que puderem ajudar. Isso é muito importante pra mim.

----
# Salve o arquivo "www.datafilehost.com/download-ce4b3fc2.html" no seu diretório de trabalho e leia-o da seguinte forma:
> Pop = read.csv(file = "nist.csv", row.names = 1)

# Pop = meu conjunto de dados (dataset). Cada 2 colunas é uma unidade de análise, ou seja, preciso analisar os dados de duas em duas colunas. Pode-se observar que as colunas de uma unidade tem o mesmo nome, diferenciadas por .1 e .2


# Nomes = níveis de dados presentes na 1ª unidade (1ª e 2ª colunas). Vou usar isso para nomear as linhas e colunas da matriz que vem adiante.
> Nomes = levels(factor(c(Pop[,1], Pop[,2])))


# matrix ObsV = Valores observados para a 1ª unidade. Aqui, estou criando uma matriz de "0" (zeros) e depois usando um loop para preenche-la com os valores do meu dataset. 

> ObsV = matrix(0, nrow = length(Nomes), ncol = length(Nomes), dimnames = list(Nomes, Nomes))

> for(i in 1:nrow(Pop[,1:2])) {
 	ObsV[paste(Pop[i,1]), paste(Pop[i,2])] = ObsV[paste(Pop[i,1]), paste(Pop[i,2])] + 1
}
> ObsV

# Muito simples: Leia a 1ª unidade de dados do dataset: quando aparecem na 1ª linha os valores 13 - 14 é somado +1 no spot "linha 13, coluna 14" da matriz ObsV. E assim por diante contando todos os valores observados. Então, se no spot "linha 10, coluna 14" da matrix ObsV eu tenho o valor 11, isso é porque o valor 10 - 14 apareceu 11 vezes no meu dataset.

# Isso funciona bem pra mim. Mas eu preciso fazer isso funcionar para todo o dataset de uma vez só, sempre trabalhando de duas em duas colunas. Ou seja, como tenho 30 colunas, preciso produzir 15 matrizes como a ObsV.
# Eu pensei em por esse loop dentro de outro loop como for(j in ncol(Pop)) {}, mas não to conseguindo escrever isso e também preciso saber como modificar minhas variáveis, como "N" e "Nomes" para que funcionem para todos os marcadores.

#todos os códigos acima podem ser substituídos pelos códigos abaixo, produzindo os mesmo resultados. Se for mais fácil resolver assim.

> Pop = read.csv("nist.csv", row.names=1)
> Nomes = levels(factor(c(pop[,1], pop[,2])))
> ObsV = table(factor(Pop[,1], levels = Nomes), factor(Pop[,2], levels = Nomes))
> ObsV
--------

Obrigado,



Vitor Rezende da Costa Aguiar
---------------------------------------------------
PhD student in Biotechnology
Rede Nordeste de Biotecnologia
Universidade Federal do Espírito Santo
---------------------------------------------------
Current Adress: 
Department of Integrative Biology
University of California, Berkeley
2033 Valley Life Sciences Building, office 4134
Berkeley, CA - USA 94720
Phone: 1 (510)-643-0060

-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20120311/03256ade/attachment.html>


Mais detalhes sobre a lista de discussão R-br