我有一个数据框,其内容如下所示,
V1 V2
00:00 3
00:01 5
00:02 3
00:03 3
00:04 1
00:05 3
为了使它成为哈希的关键值,我做了一些修改。
mins <- ndata[,1]
vols <- ndata[,2]
mins <- as.character(mins)
vols <- as.character(vols)
head(mins) # "00:00" "00:01" "00:02" "00:03" "00:04" "00:05"
head(vols) # "3" "5" "3" "3" "1" "3"
hh <- hash(keys= mins, values=vols)
.set(hh,keys= mins, values=vols)
hh["23:59" ]
hh$"23:59"
for(t in ls(hh))
{
print(hh$t) # NULL
print(hh[ t ]) ## <hash> containing 1 key-value pair(s). 23:57 : 3
val <- c(val,hh$t)
}
我无法使用hh $ t访问它们,其中t是我的迭代器变量(它返回NULL
),而其他方法发出类似<hash> containing 1 key-value pair(s). 23:57 : 3
的方法。
但是,在具有特定值的循环之外,我可以轻松访问它们。
hh$"23:59"
为我提供了期望值[1] "4"
。从一个循环内部的哈希对象中获取值的正确方法是什么?
答案 0 :(得分:2)
$
和[
之间存在相当根本的区别。基本上,您应该只在命令行中以交互方式使用前者,并且在编程时仅使用后者。
hh$t
将始终被R解释为寻找名为 t
的内容,而不是“t
中存储的值”。这就是为什么当你直接使用$
和(引用)名称时它会起作用。
特别是,请参阅?Extract
下的文档中的“递归(类似列表)对象”一节。