cbind с l oop в R - PullRequest
       15

cbind с l oop в R

1 голос
/ 20 февраля 2020

Я новичок в R и у меня есть проблема. Итак, моя проблема: у меня несколько таблиц, например: 10, также список отличается от результатов kmeans, связанных с этими таблицами (10). Поэтому я хочу использовать cbind для добавления каждого кластера в свою таблицу:

Пример:

NEW_table1<- cbind(table1,kmeans_table1$cluster)
NEW_table2<- cbind(table2,kmeans_table2$cluster)

...

Я попытался с этим кодом, но получить ошибку

for (i in 1:10)
{ assign(paste0("NEW_table", i)<-cbind(as.name(paste0("filter_table",i)),Class=(i$cluster) )) 
}

> Error in i$cluster : $ operator is invalid for atomic vectors

Ответы [ 3 ]

0 голосов
/ 20 февраля 2020

Я думаю, что вы хотите, может быть что-то вроде ниже

list2env(setNames(lapply(paste0("table",1:10), function(v) cbind(get(v),get(paste0("kmeans_",v))$cluster)),
                  paste0("NEW_table",1:10)),
         envir = .GlobalEnv)
0 голосов
/ 22 февраля 2020

спасибо всем, я исправил следующий код:

# VAR its a list of distinct values from column in large table
VAR<- unique(table$column)

for(i in VAR){
  assign( 

    paste0("New_table", i),cbind(get(paste0("filter_table",i)),Class=get(i)$cluster)
    )
}
0 голосов
/ 20 февраля 2020

Не видя данных, я угадаю, что это может сработать:

do.call(cbind, mapply(function(x, y) cbind(x, y), tables, kmeans, simplify=F))

где таблицы - это список ваших таблиц, т.е. список (таблицы), а kmeans - список ваших kmeans, то есть список. (kmeans)

x = 1:10
x2 = list(x, x, x)

y = 10:1
y2 = list(y, y, y)

do.call(cbind, mapply(function(x, y) cbind(x, y), x2, y2, SIMPLIFY = F))
...