在R中使用$后,变量的不同类或类型

在R中使用$后,变量的不同类或类型,r,R,我有一个小数据框: teams <- c("PHI","NYM","FLA","ATL","WSN") wins <- c(92, 89, 94, 72, 59) defeats <- c(70, 73, 77, 90, 102) df <- data.frame(teams, wins, defeats) 当我只使用变量的名称而不使用美元符号时,我得到字符类型和类,用于nleast$teams typeof(teams) # character class(tea

我有一个小数据框:

teams <- c("PHI","NYM","FLA","ATL","WSN")
wins <- c(92, 89, 94, 72, 59)
defeats <- c(70, 73, 77, 90, 102)

df <- data.frame(teams, wins, defeats)
当我只使用变量的名称而不使用美元符号时,我得到字符类型和类,用于nleast$teams

typeof(teams)
# character
 class(teams)
# "character"
我想知道为什么当我使用$或只是变量名时会得到不同的结果


谢谢

用于生成新变量的
data.frame
函数有一个参数
stringsAsFactors
,默认情况下为
TRUE
。这意味着在创建新数据帧时,默认情况下将
字符
类型变量转换为因子变量

要更正此问题,只需更改呼叫:

df <- data.frame(teams, wins, defeats)

默认情况下,df
data.frame
将字符转换为因子。阅读
?data.frame
并注意
stringsAsFactors
参数。到目前为止,这一点很清楚。但是,如果我使用一个美元符号或仅仅是变量的名称,为什么从类方法中得到不同的结果呢?@SchleiferGrigorij答案从字面上解释了这一点。@SchleiferGrigorij
nleast$teams
teams
是两个不同的对象,意味着它们在内存中占据不同的位置。例如,考虑<代码>对象的大小。(组)和<代码>对象。大小(DF$团队)< /代码>。第二个比第一个大2倍多(328B比720B)。@SchleiferGrigorij你得到了不同的答案,因为你指的是两个完全不同的变量。使用上述调用创建数据帧后,R将创建数据的副本以在数据帧中使用。您不再使用
$
运算符引用旧的。您可能会感到困惑,因为R使用旧变量的名称作为数据框中新列的默认名称。您可以通过更改原始向量的值并检查数据帧来测试它们是否引用内存中的同一对象。数据框的副本将保持不变。谢谢大家。答案,尤其是门塔洛夫敦的最后一句话,把事情弄清楚了。
df <- data.frame(teams, wins, defeats)
df <- data.frame(teams, wins, defeats, stringsAsFactors=FALSE)