我想以最简单的方式将这些字符串"Agra"
和"huge"
命名为place
和adjective
。
首先我尝试了这个
> 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"
虽然第二个可以工作,但仍然创建了对象。为什么这两种方法的产出存在差异?如何在不创建对象的情况下提供名称?
答案 0 :(得分:3)
这是因为<-
和=
不一样。对于(几乎)每个目的除了在函数调用中使用,<-
和=
都是相同的。如果要传递命名参数,则 使用=
而不是<-
。 myFunction(X <- expression)
将评估expression
并将结果保存到(全局)变量X
中,并将结果作为第一个(未命名的)参数放入{{1 }}。与myFunction
对比,将{strong>命名 myFunction(X = expression)
参数传递给X
并且不创建(全局)变量{ {1}}。
我的解释有点乱 - 我强烈建议您阅读更清楚的myFunction
(X
和?'<-'
的帮助文件)。
在第一个:
<-
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()
。