我想在R的一行中赋值多个变量。可以这样做吗?
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个变量,而不是多行。有没有别的选择?
发布于 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) (尽管我个人从来不这么做)。
# 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发布于 2017-07-26 22:26:55
我组装了一个R包zeallot来解决这个问题。zeallot包括一个运算符(%<-%),用于解包、多重和解构赋值。赋值表达式的LHS是使用对c()的调用构建的。赋值表达式的RHS可以是返回的任何表达式,或者是向量、列表、嵌套列表、数据框、字符串、日期对象或自定义对象(假设有destructure实现)。
这是使用zeallot修改的初始问题(最新版本,0.0.5)。
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包。
发布于 2011-09-23 09:56:34
这是我的想法。语法可能非常简单:
`%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)如下所示:
> 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不过,这还没有得到很好的测试。
https://stackoverflow.com/questions/7519790
复制相似问题