2015-05-01 3 views
4

Я хотел бы задать имена моего объекта R и вернуть его в одну строку. Это должно выглядеть примерно так:В R, как я могу задать имена объекта и вернуть его в одну строку?

names(doWork(), c("a", "b", "c")) 

И выполнить эквивалент:

x <- doWork() 

names(x) <- c("a", "b", "c") 

x 

Возможно ли это?

+1

Это дает ответ на этот вопрос, но это не дает ответа на этот вопрос. Это более общий, чем числовые векторы. – sdgfsdh

+1

Не будет 'setNames' работать над' doWork() '? – akrun

+3

'\' names <- \ '(x, c ('a', 'b', 'c'))', если вы хотите, чтобы люди думали, что вы классные – rawr

ответ

5

Вы можете попробовать setNames

x <- setNames(doWork(), letters[1:3]) 
2

Чтобы добавить к тому, что @rawr гласит:

`names<-`(x, letters[1:3]) 

работы. Это не очень интересно для установки имен, поскольку существует setNames, но есть много других функций замены атрибутов, которые не имеют соответствующей функции настройки атрибута, поэтому это может стать полезным (при воспроизведении кода гольфа). Например, если мы хотим, чтобы установить имена столбцов для списка матриц:

mats <- replicate(2, matrix(sample(1:100, 4), 2), simplify=F) # list of matrices 
lapply(mats, `colnames<-`, LETTERS[1:2]) 

Производит:

[[1]] 
     A B 
[1,] 78 59 
[2,] 39 93 

[[2]] 
     A B 
[1,] 99 54 
[2,] 1 16 
+2

Просто ничтожный момент: если вы играете в кодекс в R, 'setNames()' меньше, чем '\' names <- \ '()'. ;) –

+0

@AlexA., Я имею в виду те случаи, когда функция атрибута 'setX' недоступна. – BrodieG

+0

Я знаю, я просто имею в виду в этом конкретном случае для кодового гольфа. Это полностью в стороне; это хороший ответ. +1 –