你可以在 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_len
、arc_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 中同时分配两个变量吗?的主要内容,如果未能解决你的问题,请参考以下文章
java声明局部变量时,省略大括号,可以同时声明两个名称和类型相同的局部变量吗?
c语言是在声明变量的同时,分配内存的吗?程序结束运行了,内存会释放吗?
当我将一个字典分配给另一个变量时,为啥 Python 会同时更新两个字典? [复制]