Различное поведение при использовании оператора '=' и '‹-' при назначении фрейма данных в R

Я хотел бы знать, почему существует разница между использованием = и <- при назначении dataframe.

Случай а: использование =

set.seed(100);a <- data.frame(a1=rnorm(10),a2=sample(c(1,0),10,replace=TRUE))

Случай b: использование <-

set.seed(100);b <- data.frame(b1 <- rnorm(10),b2 <- sample(c(1,0),10,replace=TRUE))

Почему следующая разница? Почему второй метод не сохраняет имена переменных / столбцов?

> a
           a1 a2
1 -0.50219235  0
2  0.13153117  0
3 -0.07891709  1
4  0.88678481  1
5  0.11697127  0

>b
  b1....rnorm.5. b2....sample.c.1..0...5..replace...TRUE.
1    -0.50219235                                        0
2     0.13153117                                        0
3    -0.07891709                                        1
4     0.88678481                                        1
5     0.11697127                                        0

person Stat-R    schedule 26.07.2012    source источник
comment
Внутри создания data.frame () не рекомендуется использовать <-.   -  person Ari B. Friedman    schedule 26.07.2012


Ответы (3)


Внутри функций '=' используется как имя или ссылка функции на переменную с определенным именем, а ‹- относится к функции присваивания. Когда R запускается, он сначала разрешает '‹-" функции в параметрах вашей функции. Затем он присваивает переменной имя, которое находится слева от знака равенства, или полное выражение в данном случае "b1‹ - rnorm (10) ". Наконец, он разрешит функцию (в данном случае data.frame).

Вы почти всегда хотите использовать знак '=' в функции. Могут быть случаи, когда вы можете захотеть вложить присваивание «‹ - », но обычно это делает ваш код смешным для чтения.

person Paul    schedule 26.07.2012

Если вы посмотрите на ?'data.frame', вы увидите следующее для первого аргумента:

«... эти аргументы имеют либо значение формы, либо тег = значение. Имена компонентов создаются на основе тега (если он есть) или самого удаленного аргумента».

Если вы используете '‹-' вместо '=', data.frame () считывает ваш ввод как выражение (присваивая rnorm (10) a1), а не как значение . (rnorm (10)) назначается тегу тег (a1)

person Edward    schedule 26.07.2012

Просто чтобы добавить к предыдущим (очень хорошим) ответам @Paul и @Edward, вот последствия вашего использования <- вместо = внутри data.frame(). А именно, вы создали два новых объекта:

> b1
Error: object 'b1' not found
> b2
Error: object 'b2' not found
> set.seed(100);b <- data.frame(b1 <- rnorm(10),b2 <- sample(c(1,0),10,replace=TRUE))
> 
> b1
 [1] -0.50219235  0.13153117 -0.07891709  0.88678481  0.11697127  0.31863009 -0.58179068  0.71453271 -0.82525943 -0.35986213
> b2
 [1] 0 0 0 0 1 1 0 0 0 1
person Ari B. Friedman    schedule 26.07.2012
comment
Переходит ли задание в родительскую или глобальную среду? - person sebastian-c; 27.07.2012
comment
@ sebastian-c Назначение переходит в родительскую среду (а не в глобальную среду). - person Steve Pitchers; 21.07.2015