繁体   English   中英

在R中向量化环境访问

[英]Vectorize Environment Access in R

所以我创建了一个环境(我试图将其用作哈希表)。

为了澄清我正在访问存储在环境中的值:

    hash[["uniqueIDString"]] ## hash takes a uniqueID and returns a 
                             ## dataframe subset that is precomputed

我还有一个名为func的函数,它返回hash返回的行的一些子集。 它适用于单个调用,但它没有矢量化,所以我不能在一个至关重要的变换中使用它。

以下不起作用:

    df <- transform(df,FOO = func(hash[[ID]])$FOO)

它给我一个错误,就是我假设哈希的参数数量错误,因为它将ID向量传递给我的环境而环境不知道该怎么做。

编辑 :确切的错误是:

    Error in hash[[ID]] : 
      wrong arguments for subsetting an environment

编辑 :根据Rob的建议,我收到以下错误:

    Error in hash[ID] : 
      object of type 'environment' is not subsettable

编辑 :为了澄清我试图在转换的上下文中使用哈希查找,其中ID列中的值在哈希表中查找并传递给func,以便输出可以成为新列。

我使用环境作为哈希表很多,检索对应多个键的值的方法是使用mget

hash <- new.env()
hash[['one']] <- 'this is one'
hash[['two']] <- 'this is two'
mget(c('one', 'two'), envir = hash)

返回一个列表

$one
[1] "this is one"

$two
[1] "this is two"

如果您需要输出作为向量,请使用unlist

unlist(mget(c('one', 'two'), envir = hash))

给你

          one           two 
"this is one" "this is two" 

更新如果您的ID来自数据框,则需要使用unlist将该列转换为vector:

df <- data.frame(id=c('one', 'two'))
unlist(mget(unlist(df$id), envir = hash))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM