代码之家  ›  专栏  ›  技术社区  ›  Henrik

如何使用assign来更改R中数据帧内的变量?

  •  1
  • Henrik  · 技术社区  · 14 年前

    我试着这样做:

    x <- data.frame(1:20)  
    attach(x)  
    assign("x2",1:20,pos="x")  
    

    然而, x$x2 给了我 NULL .
    x2 我得到了我想要的,但这不是我生活的一部分数据框.

    附加 x2个 x 手动将在这个简单的情况下工作,但在我需要的更复杂的情况下不行。我试着 assign 分配

    3 回复  |  直到 14 年前
        1
  •  5
  •   Charles    14 年前

    尝试在以下范围内使用:

    x <- data.frame(x=1:20)
    x <- within(x, {
      x2 <- x^2
      assign('x3', x2 * 2)
      # ... other assignments
    })
    

    使用起来更干净 $ [[ 不过,这也使得列排序正确:

    x <- data.frame(x=1:20)
    x$x2 <- x$x^2
    x[['x3']] <- x$x2 * 2
    
        2
  •  4
  •   Joshua Ulrich    14 年前

    ?assign 告诉你为什么你的代码会这样。

    为什么不做一些简单的事情,比如:

    x["x2"] <- 1:20
    
        3
  •  4
  •   Gavin Simpson    14 年前

    有很多方法来分配一个变量等,哪一个是最好的将取决于个人品味。但是,有两点:

    你不想这样 attach() 什么都可以。10次中有9次效果很好,然后在你不期望的时候咬你的屁股,因为你所做的就是放置一个 搜索路径上的对象。修改原始对象,搜索路径上的对象不会更改为匹配。

    $ 一般用途。这是丑陋的,并产生了一种倾向,用户只是钻研对象和撕东西,因为他们希望。对我来说没那么重要 你的 但当我看到人们 model$residuals resid()

    如果您正在为数据分析编写脚本,而这些脚本可能会在数月或数年后返回,那么在我看来,任何能够帮助您理解代码所做的事情都是无效的。我发现 with() within()

    这更清楚:

    x <- data.frame(X = rnorm(10))
    with(x, mean(X))
    x <- within(x, Y <- rpois(10, 3))
    

    x <- data.frame(X = rnorm(10))
    mean(x$X)
    x$Y <- rpois(10, 3)
    ## or
    x["Y"] <- rpois(10, 3)
    

    即使他们做同样的事。

    assign() 内部 打电话只是浪费打字,不是吗?