所以我创建了一个环境(我试图将其用作哈希表)。
澄清我正在访问存储在环境中的值:
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以便输出可以成为一个新专栏。
答案 0 :(得分:3)
我经常使用环境作为哈希表,检索与多个键对应的值的方法是使用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))