R:如何在不创建对象的情况下命名String

时间:2016-10-17 13:46:29

标签: r

我想以最简单的方式将这些字符串"Agra""huge"命名为placeadjective

首先我尝试了这个

> args <- list(place <- "Agra", adjective <- "huge")
> args[[1]]
[1] "Agra"
but
> args[["place"]]
NULL
and
> place
[1] "Agra"

此处仅创建了place对象,但该字符串未命名为

,而

> args <- list(place = "Agra", adjective = "huge")
here 
>args[[1]]
"Agra"
> args[["place"]]
[1] "Agra"
> place
[1] "Agra"

虽然第二个可以工作,但仍然创建了对象。为什么这两种方法的产出存在差异?如何在不创建对象的情况下提供名称?

1 个答案:

答案 0 :(得分:3)

这是因为<-=不一样。对于(几乎)每个目的除了在函数调用中使用<-=都是相同的。如果要传递命名参数,则 使用=而不是<-myFunction(X <- expression)将评估expression并将结果保存到(全局)变量X中,并将结果作为第一个(未命名的)参数放入{{1 }}。与myFunction对比,将{strong>命名 myFunction(X = expression)参数传递给X并且创建(全局)变量{ {1}}。

我的解释有点乱 - 我强烈建议您阅读更清楚的myFunctionX?'<-'的帮助文件)。

在第一个:

<-

R评估全局环境中的=,返回args <- list(place <- "Agra", adjective <- "huge") 。它同样评估全球环境中的place <- "Agra",返回&#34;巨大的&#34;。然后它将结果(&#34; Agra&#34;和#34;巨大&#34;)作为未命名的参数放入"Agra"调用,所以基本上你正在做的是

adjective <- "huge"

这就是为什么你得到全局变量,而list()列表没有名字。如果这是你想要的,你应该使用长格式而不是短格式来编写它。使用第一种形式可能会导致意外或混乱的副作用。

在第二个选项中

place <- "Agra"
adjective <- "huge"
args <- list("Agra", "huge")

它只是传递命名的参数&#34; place&#34;有价值的&#34; Agra&#34;,以及命名参数&#34;形容词&#34;有价值的&#34;巨大&#34;。由于args使用参数名称作为列表名称,这就是您获得命名列表的原因。此外,这将创建全局变量args <- list(place = "Agra", adjective = "huge") list()