Thanks, that was the solution! But in fact I didn't want to have this "list of lists" layer at all. And now I'm having trouble writing matrices into the database. It's really really strange... If I write a matrix into the database manually everything works, but if I create a function which adds a matrix into the database and then run the function it fails... Look at this (sorry for the long code block, in fact you can skip the "sums" and "test_sums" functions):
######################test matrix#######################
m1=matrix(c(
1,0,
0,1
),nrow=2, byrow=TRUE)

#########################sums###########################
sums=function(matrix)
{
c(sort(colSums(matrix)),sort(rowSums(matrix)))
}

######################test_sums#########################
test_sums=function(matrix)
{
liste=database[[nrow(matrix),ncol(matrix)]][[1]]
w=1
if(length(liste)>0){
    for(i in 1:length(liste)){
        if(all(sums(matrix)==sums(liste[[i]]))){
            w0=0
        }else{
            w0=1}
    w=w*w0}
}else{
    w=2}
w
}

#####################write to db########################
write_to_db=function(matrix){
en=nrow(matrix)
fn=ncol(matrix)
if(test_sums(matrix)==1){
    print("matrix isn't in the DB yet")
    database[en,fn][[1]]=list(database[en,fn][[1]], matrix)
}else if(test_sums(matrix)==2){
    print("matrix isn't in the DB entry yet and DB is empty")
    database[en,fn][[1]][[1]]=list(matrix)
}else{
    print("matrix already exists in the DB")
}
}

######################create database##################
database=matrix(list(),2,2)

##trying to write a matrix into db using the function##
write_to_db(m1)
database

###writing a matrix into db without using a function###
en=nrow(m1)
fn=ncol(m1)
if(test_sums(m1)==1){
    print("matrix isn't in the DB yet")
    database[en,fn][[1]]=list(database[en,fn][[1]], m1)
}else if(test_sums(m1)==2){
    print("matrix isn't in the DB entry yet and DB is empty")
    database[en,fn][[1]][[1]]=list(m1)
}else{
    print("matrix already exists in the DB")
}
database

###########test whether matrix already is in db##########
write_to_db(m1)
And the output is:
[1] "matrix isn't in the DB entry yet and DB is empty"
     [,1] [,2]
[1,] NULL NULL
[2,] NULL NULL
[1] "matrix isn't in the DB entry yet and DB is empty"
[,1] [,2] [1,] NULL NULL [2,] NULL List,1
[1] "matrix already exists in the DB"
So writing the matrix into the database using the function fails while writing it using the same commands but not through a function works! Maybe it's a problem with all these layers in the database matrix?

Petr PIKAL schrieb:
Hi

r-help-boun...@r-project.org napsal dne 19.08.2009 13:04:39:

Strange, it doesn't work for me:

Error in database[4, 4][[1]][1, ] : incorrect number of dimensions
Execution halted

R version 2.9.0 (2009-04-17) on Arch Linux, no additional packages installed.

database[4,4][[1]][,1]

does not work for me either but it is result of your complicated structure of nested lists

This works

database[4,4][[1]][[1]][,1]
[1] 0 1 1 1

See the structure

Matrix of lists

database
     [,1] [,2] [,3] [,4]   [,5]
[1,] NULL NULL NULL NULL   NULL
[2,] NULL NULL NULL NULL   NULL
[3,] NULL NULL NULL NULL   NULL
[4,] NULL NULL NULL List,1 NULL
[5,] NULL NULL NULL NULL   NULL

List of lists
database[4,4]
[[1]]
[[1]][[1]]
     [,1] [,2] [,3] [,4]
[1,]    0    1    1    1
[2,]    1    0    1    1
[3,]    1    1    0    1
[4,]    1    1    1    0

List which contains your matrix

database[4,4][[1]]
[[1]]
     [,1] [,2] [,3] [,4]
[1,]    0    1    1    1
[2,]    1    0    1    1
[3,]    1    1    0    1
[4,]    1    1    1    0

Here is your matrix

database[4,4][[1]][[1]]
     [,1] [,2] [,3] [,4]
[1,]    0    1    1    1
[2,]    1    0    1    1
[3,]    1    1    0    1
[4,]    1    1    1    0
Regards
Petr

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to