2015-03-04 3 views
2

У меня есть имя матрицы в виде строки и вы хотите присвоить столбцу этой матрицы.Как назначить подмножество объекта R с именем, заданным как строка

A <- matrix(1:4,2) 
v <- 10:11 
name <- "A" 
get(name)[,2] <- v 

Это не работает, потому что LHS просто значение (т.е. вектор) и потерял значение «второй колонке А».

eval(parse(text=paste0(name,'[,2]<- v'))) 

Это делает работу, но многие люди препятствуют использованию такой структуры. Каков рекомендуемый способ сделать это?

EDIT: Большинство комментариев по схожим проблемам, которые я нашел препятствовать использованию имен объектов, которые могут быть переданы только в виде строк и вместо того, чтобы способствовать использованию списков, т.е.

l <- list(A=matrix(1:4,2)) 
v <- 10:11 
name <- "A" 
l[[name]][,2] <- v 

, но это не действительно ответьте на мой вопрос.

+1

вы должны сделать свой вопрос более ясным –

+2

Если вы преобразуете матрицу в dataframe, вы сможете использовать 'assign' i.e. A <- as.data.frame (A); assign (name, '[[<-' (get (name), 'V2', value = v)) ' – akrun

+1

Если вам действительно нужно ...' assign (name, {B <- get (name); B [, 2] <- v; B}) ' – bergant

ответ

0

Для изменения названия столбцов, вы должны работать на data.frame, а не на матрице:

A <- matrix(1:4,2) 
v <- 10:11 
name <- "A" 

A <- as.data.frame(A) 
v <- as.data.frame(v) 
colnames(A)[2] <- name 
A[,2] <- v 

Это то, что вы искали?

+1

Я не хочу иметь именованный столбец. Вместо этого я хочу избежать использования имени в задании. (I.e. no «A» в фактической замене столбца, просто ссылка на «имя») – user1965813

Смежные вопросы