cbind с петлей в R

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

Ex:

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

person Younes Allim    schedule 20.02.2020    source источник
comment
i — целочисленный индекс. i$cluster не существует. И синтаксис assign неверен, второй аргумент - value для сохранения. Пожалуйста, проверьте stackoverflow.com/questions/17559390/why-is -using-assign-bad   -  person Clemsang    schedule 20.02.2020


Ответы (3)


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

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))
person Adam Waring    schedule 20.02.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)
person ThomasIsCoding    schedule 20.02.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)
    )
}
person Younes Allim    schedule 22.02.2020