[R-es] Error lectura

Carlos Ortega cof en qualityexcellence.es
Sab Sep 9 02:23:09 CEST 2017


Hola,

Hay un primer error en la forma en la que grabas el csv.
Tienes que indicar que no te ponga nombres a las filas...
Y al leer el csv, tienes que indicar que hay cabecera.

write.csv(ms, file = 'dato.csv', *row.names = FALSE*)
datIn <- read.table('dato.csv', sep = ',', as.is = T, *header = TRUE*)

Y luego hay otro error importante.

Cuando dices:

mtzbin[i, j]

Uno esperaría un único valor para rellenar ese elemento de la matriz
"mtzbin", pero lo que obtienes de esta cuenta:

((vec/sma)^vec)*((1-vec/sma)^(sma-vec))*choose((sr-1),(vec-1))

es esto...

    ((vec/sma)^vec)*((1-vec/sma)^(sma-vec))*choose((sr-1),(vec-1))
 [1] 0.002626719 0.003161702 0.002793684 0.003065193 0.002971755 0.002708859
 [7] 0.003161702 0.002626719 0.002626719 0.002708859 0.002626719 0.002971755
[13] 0.002881284 0.003364353 0.002793684 0.003065193 0.004901558 0.002793684
[19] 0.002971755 0.004187086 0.004057734 0.002881284 0.003364353 0.003470717
[25] 0.002708859 0.003261385 0.003364353 0.002971755 0.002971755 0.002626719
[31] 0.002881284 0.002881284 0.002971755 0.002626719 0.002547173 0.002708859
[37] 0.003470717 0.002793684 0.002708859

un vector de 37 elementos...

Hay algo que en concepto no es correcto en esa cuenta. Claramente le faltan
subindices, "sma" es un vector,

Cuando tienes este tipo de problemas, itera "a mano".
Simplemente haz:
i <- 1
j <- 1

Y ves el resultado de la operación...

En cambio la línea que tienes comentada, parece que es la correcta, "sma"
está indexado..:

((vec/sma[j])^vec)*((1- vec/sma[j])^(sma[j]-vec))*choose((sr-1),(vec-1))
[1] 0.002626719

Y efectivamente, si esa línea, la quitas el comentario y comentas la otra,
la que devuelve el vector de 37 elementos, el bucle funciona sin
problemas...

> head(mtzbin)
            [,1]        [,2]        [,3]        [,4]        [,5]
 [,6]        [,7]        [,8]        [,9]
[1,] 0.002626719 0.004978632 0.005201255 0.006462926 0.006391686
0.002353819 0.004419175 0.004785744 0.006434316
[2,] 0.002689092 0.006981814 0.005856663 0.004714338 0.003580492
0.006443308 0.004419175 0.002689092 0.004301845
[3,] 0.002297961 0.003883366 0.003086845 0.006462926 0.005394031
0.004988292 0.006060432 0.004399715 0.003851898
[4,] 0.003159180 0.006187438 0.005635778 0.005556810 0.005394031
0.005346379 0.007985787 0.004399715 0.003851898
[5,] 0.002433220 0.005210141 0.003725039 0.005128456 0.006921837
0.003548008 0.002245950 0.004003866 0.003379612
[6,] 0.003379612 0.004978632 0.003934702 0.004312628 0.004921966
0.004274360 0.006981814 0.005542097 0.003379612
           [,10]       [,11]       [,12]       [,13]       [,14]
[,15]       [,16]       [,17]       [,18]
[1,] 0.003793022 0.004350860 0.001971524 0.004148574 0.002331970
0.000000000 0.003921276 0.003526645 0.000000000
[2,] 0.004393626 0.004350860 0.003058957 0.000000000 0.003964126
0.002168110 0.007445536 0.000000000 0.000000000

....

Saludos,
Carlos Ortega
www.qualityexcellence.es









2017-09-09 0:33 GMT+02:00 Manuel Máquez <manuelmx11 en gmail.com>:

> Los datos originales están Tdist.csv que adjunto, el código es:
> mc <- matrix(0,39,48,byrow = T)           # Matriz Cta
> mp <- matrix(0,39,48,byrow = T)           # Matriz Pr
> ms <- matrix(0,39,48,byrow = T)           # Matriz Sumas
> mtzbin <- matrix(0,39,48,byrow = T)       # Matriz Binom
> vec <- 0                                  # Valor temporal
> dt <- read.csv('Tdist.csv', header = F)   # Datos
> lg <- 0                                   # Inicial
> lg <- length(dt$V1)                       # Valor longitud
> for(i in 1:lg) {                          # Registro
>     for(j in 1:39) {                      # Elemento
>         da <- dt[i ,j]                    # Dato
>         if(da == 0) {next
>             }else{
>             mc[j, da] <- mc[j, da] + 1
>             ms[j, da] <- ms[j, da] + da
>             it <- da/mc[j, da]
>             mp[j, da] <- it
>         }
>     }
> }
> sma <- rowSums(ms, 1)
> sr <- max(sma)
> write.csv(ms, file = 'dato.csv')
> datIn <- read.table('dato.csv', sep = ',', as.is = T)
> for(i in 1:39) {
>     for(j in 1:48) {
>         vec <- datIn[i, j]
>     #    mtzbin[i, j] <- ((vec/sma[j])^vec)*((1- vec/sma[j])^(sma[j]-vec))*
> choose((sr-1),(vec-1))
>         mtzbin[i, j] <- ((vec/sma)^vec)*((1-vec/sma)^(
> sma-vec))*choose((sr-1),(vec-1))
>     }
> }
> Se trata de leer los datos por medio de la primera parte del código, para
> después construir una tabla de probabilidad binomial negativa, vía la
> segunda parte del mismo.
> Esa primera parte da por resultado 'dato.csv' que también adjunto.
> Carlos, nuevamente muchas gracias.
> Atentamente;
> *MANOLO MÁRQUEZ P.*
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>



-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es