R 一次为环境指定多个值

R 一次为环境指定多个值,r,environment,r-s3,R,Environment,R S3,给定一个环境x,assign(x,value,envir=e)的一个方便的简写是写e[[x]],下面是一个开始,从?列表2env L <- list(a = 1, b = 2:4, p = pi, ff = gl(3, 4, labels = LETTERS[1:3])) e <- list2env(L) addToEnv <- function(e, names, values) { l1 <- sapply(values, list) names(l1

给定一个环境
x
assign(x,value,envir=e)
的一个方便的简写是写
e[[x]],下面是一个开始,从
?列表2env

L <- list(a = 1, b = 2:4, p = pi, ff = gl(3, 4, labels = LETTERS[1:3]))
e <- list2env(L)
addToEnv <- function(e, names, values) {
    l1 <- sapply(values, list)
    names(l1) <- names
    el1 <- mget(ls(e), envir=e)
    al1 <- as.list(c(el1, l1))
    return(list2env(al1))
    }
e2 <- addToEnv(e, names=letters[7:8], values=letters[9:10])
mget(ls(e2), envir=e2)

我承认这不是v。高效,但应适用于小型环境。

list2env
可能在这里有用。同样,这也有效,但可能不是最好的方法:
lappy(1:2,函数(i)赋值(c(“b”,“c”)[i],c(1,2)[i],envir=e))
相关兴趣:从2012年开始,08年有一个类似的方法,还有一个更早的方法('04)作为一种实现尝试。。。您提前两年提出请求。我主要关心的是如何覆盖子集赋值运算符
[
> methods("[<-")
[1] [<-.data.frame  [<-.Date        [<-.environment [<-.factor      [<-.POSIXct     [<-.POSIXlt     [<-.raster*     [<-.ts* 
> summary
function (object, ...) 
UseMethod("summary")
<bytecode: 0x1a7c3a8>
<environment: namespace:base>
> methods(class = environment)
[1] as.list.environment
> `[<-.environment` = function(x, names, values) {
mapply(function(name, value) { x[[name]] <- value }, names, values) }
> methods(class = environment)
[1] [<-.environment     as.list.environment
> methods(`[<-`)
[1] [<-.data.frame  [<-.Date        [<-.environment [<-.factor      [<-.POSIXct     [<-.POSIXlt     [<-.raster*     [<-.ts*  
> e = new.env(parent = emptyenv())
> e[c("b", "c")] <- c(1,2)
Error in e[c("b", "c")] <- c(1, 2) : 
  object of type 'environment' is not subsettable
L <- list(a = 1, b = 2:4, p = pi, ff = gl(3, 4, labels = LETTERS[1:3]))
e <- list2env(L)
addToEnv <- function(e, names, values) {
    l1 <- sapply(values, list)
    names(l1) <- names
    el1 <- mget(ls(e), envir=e)
    al1 <- as.list(c(el1, l1))
    return(list2env(al1))
    }
e2 <- addToEnv(e, names=letters[7:8], values=letters[9:10])
mget(ls(e2), envir=e2)
$a
[1] 1

$b
[1] 2 3 4

$ff
 [1] A A A A B B B B C C C C
Levels: A B C

$g
[1] "i"

$h
[1] "j"

$p
[1] 3.141593