【问题标题】:what is the difference meaning between <- and = in data.frame?data.frame中<-和=之间的区别是什么?
【发布时间】:2012-12-30 07:31:59
【问题描述】:

在data.frame中,&lt;-会得到很奇怪的输出,是什么原因?

x<-data.frame(name<-c("n1","n2"),age<-c(5,6))
y<-data.frame(name=c("n1","n2"),age=c(5,6))
> x
name....c..n1....n2.. age....c.5..6.
1                    n1              5
2                    n2              6
> y
  name age
1   n1   5
2   n2   6

data.frame 中的

【问题讨论】:

标签: r


【解决方案1】:

不,这并不奇怪。您使用 namedunnamed 对象调用 data.frame 的构造函数。

本来我以为data.frame是一个列表,用help(list)来解释data.frame的行为。即使哲学是相同的(命名和未命名的论点)这是一个错误,答案是在 data.frame 的帮助下

来自 ?data.frame 我在这部分讨论参数的名称

如果参数都是命名的简单对象(不是列表, 数据框的矩阵)然后参数名称给出列 名字。对于未命名的简单参数, 参数用作名称(删除了封闭的 I(...))。

所以

x<-data.frame(name<-c("n1","n2"),age<-c(5,6))

这相当于:

 x <- data.frame(c("n1","n2"),c(5,6))   ## unnamed objects The functions return dotted pair list 
 name<-c("n1","n2")
 age<-c(5,6)

那么对于 y

y<-data.frame(name=c("n1","n2"),age=c(5,6))  ## named objects functions return a list 

但请注意,这仅解释了简单对象参数的命名过程。命名比添加一些点更复杂。 例如,我发现这 2 个语句是等效的(使用 check.names=T 或 F)非常令人惊讶:

         a <- data.frame(y <- list(x=1)) 
         a <- data.frame(y = list(x=1)) 

【讨论】:

  • 我认为help(list) 中的信息无法解释这一点。看list(x&lt;-1:4)的结果
  • @DWin 你是对的!谢谢我更正了我的答案,希望这个能更好地解释这个问题。
  • 在最后一位中,表达式y &lt;- list(x=1) does 的值有一个值,而该对象的值does 有一个名称.
【解决方案2】:

是的,我想你会的。表达式age&lt;-c(5,6) 确实给出了结果(来自&lt;- 的值),但是由于您未能在参数列表中为形式使用正确的赋值运算符,因此完整的表达式被传递给 check.names 作为列的名称.它将所有无效字符转换为点。你可以阻止 check.names 被调用(不是你通常会这样做。

> x<-data.frame(name<-c("n1","n2"),age<-c(5,6), check.names=FALSE)
> x
  name <- c("n1", "n2") age <- c(5, 6)
1                    n1              5
2                    n2              6

【讨论】:

    【解决方案3】:

    像许多语言一样,R 是由内而外工作的。所以在你的 x 示例中,'name' 被分配了 'n1' 和 'n2' 的值,以及 5 和 6 的 'age' 值,但是创建 data.frame 时,R 会将这些列的名称解释为您提供的完整字符串,其中特殊字符变为点...最好坚持使用 y 示例的语法。

    【讨论】:

    猜你喜欢
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    相关资源
    最近更新 更多