你可以在 R 中同时分配两个变量吗?

Posted

技术标签:

【中文标题】你可以在 R 中同时分配两个变量吗?【英文标题】:Can you assign two variables simultaneously in R? 【发布时间】:2016-09-04 13:07:37 【问题描述】:

我使用的示例是根据圆的半径 (r) 和圆弧的角度 (theta) 计算圆弧的长度和圆弧下的面积。面积和长度都是基于r和theta,可以在python中同时计算。

在python中,我可以通过这样做同时分配两个值。

    from math import pi
    def circle_set(r, theta):
        return theta * r, .5*theta*r*r

    arc_len, arc_area = circle_set(1, .5*pi) 

在 R 中实现相同的结构给了我这个。

    circle_set <- function(r, theta)
        return(theta * r, .5 * theta * r *r)
        

    arc_len, arc_area <- circle_set(1, .5*3.14)

但返回此错误。

arc_len, arc_area

错误:“arc_len”中出现意外的“,”

有没有办法在 R 中使用相同的结构?

【问题讨论】:

这是两个独立的值,arc_len != arc_area 我不知道那个 python 代码在做什么,所以你可能需要解释你正在尝试做什么。 好的,完成。让我知道我的解释是否正确。 为了帮助 OP 进行搜索,Python 的特性称为元组解包。 R的做事方式是更多地依赖于Gregor的回答中的列表;即使用列表arc_properties 而不是单独的arc_lenarc_area 变量。请注意,这比 Python 中的等价物要少麻烦,因为可以命名列表元素(因此它们具有一些类似字典的属性)并且因为它们不可变 - R 具有修改时复制语义 绝对不是“离题”,但可能重复:***.com/q/7519790/592355 【参考方案1】:

不,你不能在 R 中这样做(至少,不能在我知道的基础或任何包中)。

最接近的方法是将对象分配给列表的不同元素。如果您真的想要,您可以使用list2env 将列表元素放入环境(例如,全局环境)中,或者使用attach 使列表元素可访问,但我认为您不会从中获得太多收益这些方法。

如果您希望函数返回多个值,只需将它们放在一个列表中即可。另见r - Function returning more than one value。

您可以为多个变量分配 相同 值,如下所示。即使在这里,我认为代码不寻常且不太清晰,我认为这超过了简洁的任何好处。 (虽然我认为它清楚地表明所有变量都是相同的值......也许在正确的上下文中它是有道理的。)

x <- y <- z <- 1
# the above is equivalent to
x <- 1
y <- 1
z <- 1

【讨论】:

【参考方案2】:

正如 Gregor 所说,没有办法完全按照你说的那样做,他的方法很好,但你也可以让一个向量代表你的两个值,如下所示:

# Function that adds one value and returns a vector of all the arguments.
plusOne <- function(vec) 

  vec <- vec + 1
  return(vec)



# Creating variables and applying the function.
x <- 1
y <- 2
z <- 3
vec <- c(x, y, z)
vec <- plusOne(vec)

所以基本上你可以创建一个向量并让你的函数返回向量,这实际上是一次填充 3 个值。同样,不是您想要的,只是一个建议。

【讨论】:

以上是关于你可以在 R 中同时分配两个变量吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以同时在 VBA 中声明和分配一个变量吗?

java声明局部变量时,省略大括号,可以同时声明两个名称和类型相同的局部变量吗?

c语言是在声明变量的同时,分配内存的吗?程序结束运行了,内存会释放吗?

当我将一个字典分配给另一个变量时,为啥 Python 会同时更新两个字典? [复制]

两个人同时按下 Google 电子表格上的按钮会导致分配的功能发生冲突吗?

Vim可以显示两个缩进空格,同时在文件中保留四个空格吗?