I have a problem with dynamic appending to a list. Here is the list
variable:
clusters <- vector("list", 0)
I extended in the function below:
cluster <- function (pair, clusters)
{
found <- FALSE
for (i in length(clusters))
{
if (length(intersect(pair, clusters[i])) > 0)
{
clusters[i] <- union(clusters[i], pair)
found <- TRUE
}
}
if (!found)
{
clusters <- list(clusters, as.vector(pair))
}
}
The function is executed in a loop:
for (i in 1:nrow(adjMatrix))
{
for (j in 1:nrow(adjMatrix))
{
if ((i != j) && adjMatrix[i,j] >0) # the matrix element has to be non-zero
in order to be clustered
{
cat(rownames(adjMatrix)[i], colnames(adjMatrix)[j], "\n")
cluster(as.vector(c(rownames(adjMatrix)[i], colnames(adjMatrix)[j])),
clusters)
}
}
}
But the list variable remains empty (i.e. length(clusters) = 0) even though
it should not. Somehow the dynamic extension of the list does not work in
this case. Any suggestions?
Best regards,
Nick
--
View this message in context: http://www.nabble.com/How-to-append-to-a-list-dynamically--tp24071794p24071794.html
Sent from the R help mailing list archive at Nabble.com.
______________________________________________
R-h...@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.
> I have a problem with dynamic appending to a list. Here is the list
> variable:
>
>
> clusters <- vector("list", 0)
>
library(fortunes)
fortune("dog")
I would suggest that referring to a character vector as a "list", and
then also calling an element in that vector "list" is akin to calling
your cat, "dog", and then calling its tail, "dog", as well.
>
> I extended in the function below:
>
>
> cluster <- function (pair, clusters)
> {
> found <- FALSE
> for (i in length(clusters))
> {
> if (length(intersect(pair, clusters[i])) > 0)
> {
> clusters[i] <- union(clusters[i], pair)
> found <- TRUE
> }
> }
> if (!found)
> {
> clusters <- list(clusters, as.vector(pair))
So the first time cluster() is called, it would need to handle a
vector correctly, but now you have changed clusters to be a list and
the second call to clusters will need to handle a list correctly.
> }
> }
>
>
> The function is executed in a loop:
>
>
> for (i in 1:nrow(adjMatrix))
> {
> for (j in 1:nrow(adjMatrix))
> {
> if ((i != j) && adjMatrix[i,j] >0) # the matrix element has to be
> non-zero
> in order to be clustered
> {
> cat(rownames(adjMatrix)[i], colnames(adjMatrix)[j], "\n")
> cluster(as.vector(c(rownames(adjMatrix)[i], colnames(adjMatrix)
> [j])),
> clusters)
> }
> }
> }
>
>
> But the list variable remains empty (i.e. length(clusters) = 0) even
> though
> it should not. Somehow the dynamic extension of the list does not
> work in
> this case. Any suggestions?
Use appropriate naming and do not conflate "vector" with "list". They
need different functions to properly access elements or extend their
lengths.
David Winsemius, MD
Heritage Laboratories
West Hartford, CT