【问题标题】:Setting an object to itself将对象设置为自身
【发布时间】:2014-05-25 05:42:48
【问题描述】:

我是 R 新手,对此处发布的函数有疑问:R RStudio Resetting debug / function environment。为什么将对象设置为自己(例如“getmean = getmean”等)?不能简单的写成:list(set, get, setmean, getmean)

【问题讨论】:

  • 我觉得左边是参数名,右边是函数名。在这种情况下,它们是相等的,但并不总是如此。

标签: r


【解决方案1】:

区别在于

aa <- list(set, get, setmean, getmean)

是一个未命名的列表并且

bb <- list(set=set, get=get, setmean=setmean, getmean=getmean)

是一个命名列表。比较 names(aa)names(bb)

= 不是赋值。它实际上只是给列表项一个标签。这是 R 程序员尝试仅使用 &lt;- 进行赋值并留下 = 具有此特殊含义的原因之一。你也可以轻松完成

cc <- list(apple=set, banana=get, ornage=setmean, grape=getmean)
cc$apple()

不必是完全相同的名称。

【讨论】:

    【解决方案2】:

    因为list(set, get, setmean, getmean) 不会用正确的名称标记列表元素。以下是标记列表和未标记列表之间区别的示例:

    > list(1, 2, 3)
    [[1]]
    [1] 1
    
    [[2]]
    [1] 2
    
    [[3]]
    [1] 3
    
    > list(foo=1, bar=2, baz=3)
    $foo
    [1] 1
    
    $bar
    [1] 2
    
    $baz
    [1] 3
    

    请注意,在参数列表的上下文中,= 用于提供命名参数,它不进行任何赋值(与 &lt;- 不同)。因此list(foo=1, bar=2, baz=3)list(foo&lt;-1, bar&lt;-2, baz&lt;-3)非常不同。

    【讨论】:

    • 很好,很有意义。谢谢。
    【解决方案3】:

    问题已得到解答,但您也可以这样做以获得相同的结果。

    > object <- c('set', 'get', 'setmean', 'getmean')
    > setNames(object = as.list(object), nm = object)
    # $set
    # [1] "set"
    # 
    # $get
    # [1] "get"
    # 
    # $setmean
    # [1] "setmean"
    # 
    # $getmean
    # [1] "getmean"
    

    引用取决于这些值的实际值。
    你可以像这样设置不同的名字

    > setNames(as.list(object), letters[1:4])
    # $a
    # [1] "set"
    #
    # $b
    # [1] "get"
    #
    # $c
    # [1] "setmean"
    #
    # $d
    # [1] "getmean"
    

    setNames 在使用 lapply 时会派上用场。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      • 2015-03-19
      相关资源
      最近更新 更多