Использование пасты в R

У меня вопрос по использованию пасты в R

a<-c(1,2,3,5,5,6,7,8)
b<-c(2,3,5,6,2,3,6,7)
d<-c(2,8,4,6,3,7,3,5)

df<-data.frame(a,b)
cbind(df,sugar=d)

Используя приведенный выше код, я получил следующее:

>  a b sugar
 1 1 2     2
 2 2 3     8
 3 3 5     4
 4 5 6     6
 5 5 2     3
 6 6 3     7
 7 7 6     3
 8 8 7     5

Однако мне интересно, почему я не смог получить те же результаты с помощью функции вставки:

name<-c("sugar","salt","fat")
cbind(df,paste(name[1])=d)

Любая помощь приветствуется!!


person Head and toes    schedule 30.10.2014    source источник
comment
R не является макроязыком (например, SAS). Вы не можете использовать paste(name[1])=d и ожидать, что синтаксический анализатор построит имя R из значения символа R с целью присвоения. Однако есть функция assign, которая позволит вам это сделать, но только в том случае, если в результате вставки будет получено простое символьное значение, а не выражение, которое требует дальнейшей оценки.   -  person IRTFM    schedule 30.10.2014


Ответы (2)


Если вам нужно создать новый столбец с именем, хранящимся в объекте, попробуйте

 df[name[1]] <- d
 df
 #  a b sugar
 #1 1 2     2
 #2 2 3     8
 #3 3 5     4
 #4 5 6     6
 #5 5 2     3
 #6 6 3     7
 #7 7 6     3
 #8 8 7     5

Другой вариант - использовать assign

 assign('df', `[[<-`(df, name[1], value=d))
person akrun    schedule 30.10.2014
comment
Это правильный способ сказать это. Впрочем, тебе там , не нужно - person David Arenburg; 30.10.2014
comment
@David Arenburg, Спасибо, удалю , - person akrun; 30.10.2014

Вы хотите изменить имя, попробуйте setNames.

 > setNames(cbind(df, d), c(colnames(df),name[1]))
   a b sugar
 1 1 2     2
 2 2 3     8
 3 3 5     4
 4 5 6     6
 5 5 2     3
 6 6 3     7
 7 7 6     3
 8 8 7     5
person Robert Krzyzanowski    schedule 30.10.2014