Если у вас есть такая функция, как:
int foo()
{
// more stuff
foo();
}
Затем foo () будет продолжать называть себя, все глубже и глубже, и когда пространство, используемое для отслеживания того, какие функции вы используете, заполненный, вы получаете ошибку переполнения стека.
data.frame - это список, а столбцы - его элементы. Если вы извлекаете столбец и хотите сохранить его имя, вы не можете использовать $
, если вам нужно получить имя столбца вместе со значениями столбца, используйте [
df
# col_a col_b
# 1 1 5
# 2 2 2
# 3 3 8
Если извлечение путем присвоения имени столбца ($
), будут получены только значения, если извлечение по положению столбца ([
), оно дает имя столбца + значения в этом столбце. Этот [
может содержать позиции элемента по числу или имени, но сохраняет имя
$
df$col_a
# [1] 1 2 3
[
df[1]
# col_a
# 1 1
# 2 2
# 3 3
Поведение списка (как было сказано выше, data.frame - это список)
my_list <- list(a = 1:10, b = 1:3, c= 4)
Чтобы извлечь значения в элементе a
Element Name - Gives Только значения
my_list$a
# [1] 1 2 3 4 5 6 7 8 9 10
Чтобы извлечь значения элемента в положение 1
Позиция элемента - Дает имя элемента + значения в элементе
my_list[1]
# $a
# [1] 1 2 3 4 5 6 7 8 9 10
Дополнительная помощь в консоли R типа
?`[`
исходный кадр данных - это список, поэтому вы можете подмножество с помощью $
. Однако, чтобы сохранить характеристики dataframe при создании нового столбца (списка), вам нужно использовать drop=F
x<- df[,"col_a",drop=F]
colnames(x)
[1] "col_a"