【问题标题】:Can I assign variables in batch? [duplicate]我可以批量分配变量吗? [复制]
【发布时间】:2012-11-01 05:01:48
【问题描述】:

例如我有 2 个变量 ab(在我的实际情况下实际上超过 2 个),我可以像 c(a,b)<-c(0,0) 那样为它们赋值,就像 元组 em> 在 Python 中?谢谢。

【问题讨论】:

  • @JackManey 是的,我试过但没有通过。我正在询问具有相同效果的分配方式。
  • 如果您想将它们分配给相同的值(即您的示例中的 0),您可以使用a = b = 0。但是在 R 中没有相当于元组解包的方法。

标签: r


【解决方案1】:

没有内置方法可以做到这一点 - 您正在寻找的内容与 R 中的 listsvectors 非常相似 - 而不是回调 abc ,您回拨a[1]a[2]a[3]。如果能够通过单独的名称回调这些值并能够从同一行分配它们对您很重要,您可以创建一个简单的函数:

Assign <- function(Names, Values) {
             for(i in 1:length(Names)){
                  assign(Names[i], Values[i], envir=.GlobalEnv)
             }}

>A <- c("a", "b", "c", "d")
>B <- c(0,4,2,3)
>Assign(A,B)
>c
#[1] 2

我想不出一种方法让apply 家庭解决这个问题而不让它变得太复杂 - 也许有人可以帮助我。

【讨论】:

  • Assign &lt;- function(Names, Values) {sapply(seq_along(Names), function(i){assign(Names[i], Values[i], envir=.GlobalEnv)});invisible()} 不太复杂 - 只需在索引向量上使用 sapplylapply 并创建一个匿名函数来执行实际分配。我把隐形的东西放在那里让它更好看。
  • 谢谢 - 我以前从未尝试过 seq_along - 对于真正需要 for 循环但容易受到循环带来的缺点影响的任务来说,这似乎是一个不错的选择。跨度>
  • mapply(assign, Names, Values, MoreArgs = list(envir = .GlobalEnv))
  • @flodel 好多了——我需要更频繁地考虑mapply
【解决方案2】:

您可以按照in this question 的说明使用%=% (必须复制粘贴四个函数)

# Example Call;  Note the use of g()  AND  `%=%`
#     Right-hand side can be a list or vector
g(a, b, c)  %=%  list("hello", 123, list("apples, oranges"))

# Results: 
> a
[1] "hello"
> b
[1] 123
> c
[[1]]
[1] "apples, oranges"

【讨论】:

  • 感谢您的链接 - 看起来这个问题可能应该作为副本关闭。
猜你喜欢
  • 2019-08-31
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
相关资源
最近更新 更多