R:访问具有整数名称的向量

时间:2012-01-29 03:09:36

标签: r

我有一个大函数,其矢量定义如下:

v <- mat.or.vec(length(communities), 1)
names(v) <- communities

并且,我在循环中访问v的元素,如下所示

for(c in communities){
  v[c] = 1
}

编写和测试此代码时,列表communities是一个字符串列表。但是今天当我在communities列表中包含所有整数值的数据集上运行它时,我的函数崩溃了。我花了一段时间才弄清楚当communities是一个整数列表时,c是一个整数,而v[c]访问{{1}的c th 元素而不是名为v的{​​{1}}元素。

我可以通过v之类的东西解决这个问题。有许多这样的变量面临同样的问题。

这个问题有更优雅的解决方案吗?

2 个答案:

答案 0 :(得分:2)

嗯,最简单的变化是for声明:

for(c in as.character(communities)){
  v[c] = 1
}

或矢量化:

v[as.character(communities)] <- 1

或者为了获得更多控制权,你可以自己做比赛:

idx <- match(communities, names(v))
v[idx] <- 1

答案 1 :(得分:0)

不确定为什么要为矢量的元素命名 - 有点浪费。为什么不做呢

v <- mat.or.vec(length(communities), 1)  # or better: v<- rep(NA,length(communities)  
for (i in 1: length(communities)) { 
     v[i] <- 1  
 }

但是如果你需要使用communities元素的值,那么你需要包含一些引号:

Rgames> mat.or.vec(3, 1)->bar
Rgames> names(bar)<-4:6
Rgames> bar
4 5 6 
0 0 0 
Rgames> bar['4']
4 
0 
Rgames> bar[4]
<NA> 
 NA 

我假设你提供了一个简化的例子,你需要做一些比简单地将v的所有元素的值设置为1更复杂的事情。