首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一行中为LHS赋值多个新变量

在一行中为LHS赋值多个新变量
EN

Stack Overflow用户
提问于 2011-09-23 02:44:50
回答 13查看 65.8K关注 0票数 94

我想在R的一行中赋值多个变量。可以这样做吗?

代码语言:javascript
复制
values # initialize some vector of values
(a, b) = values[c(2,4)] # assign a and b to values at 2 and 4 indices of 'values'

通常,我希望在一行中分配大约5-6个变量,而不是多行。有没有别的选择?

EN

回答 13

Stack Overflow用户

发布于 2013-02-25 22:02:39

考虑使用基础R中包含的功能。

例如,创建一个单行数据帧(比如V)并初始化其中的变量。现在,您可以一次将多个变量赋值为V[,c("a", "b")] <- values[c(2, 4)],按名称调用每个变量(V$a),或同时使用多个变量(values[c(5, 6)] <- V[,c("a", "b")])。

如果你变得懒惰,不想到处调用数据帧中的变量,你可以使用attach(V) (尽管我个人从来不这么做)。

代码语言:javascript
复制
# Initialize values
values <- 1:100

# V for variables
V <- data.frame(a=NA, b=NA, c=NA, d=NA, e=NA)

# Assign elements from a vector
V[, c("a", "b", "e")] = values[c(2,4, 8)]

# Also other class
V[, "d"] <- "R"

# Use your variables
V$a
V$b
V$c  # OOps, NA
V$d
V$e
票数 37
EN

Stack Overflow用户

发布于 2017-07-26 22:26:55

我组装了一个R包zeallot来解决这个问题。zeallot包括一个运算符(%<-%),用于解包、多重和解构赋值。赋值表达式的LHS是使用对c()的调用构建的。赋值表达式的RHS可以是返回的任何表达式,或者是向量、列表、嵌套列表、数据框、字符串、日期对象或自定义对象(假设有destructure实现)。

这是使用zeallot修改的初始问题(最新版本,0.0.5)。

代码语言:javascript
复制
library(zeallot)

values <- c(1, 2, 3, 4)     # initialize a vector of values
c(a, b) %<-% values[c(2, 4)]  # assign `a` and `b`
a
#[1] 2
b
#[1] 4

有关更多示例和信息,可以查看vignette包。

票数 36
EN

Stack Overflow用户

发布于 2011-09-23 09:56:34

这是我的想法。语法可能非常简单:

代码语言:javascript
复制
`%tin%` <- function(x, y) {
    mapply(assign, as.character(substitute(x)[-1]), y,
      MoreArgs = list(envir = parent.frame()))
    invisible()
}

c(a, b) %tin% c(1, 2)

如下所示:

代码语言:javascript
复制
> a
Error: object 'a' not found
> b
Error: object 'b' not found
> c(a, b) %tin% c(1, 2)
> a
[1] 1
> b
[1] 2

不过,这还没有得到很好的测试。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7519790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档