R:使用整数名访问向量

R:使用整数名访问向量,r,R,我有一个大函数,它的向量定义如下: v <- mat.or.vec(length(communities), 1) names(v) <- communities 编写和测试此代码时,列表communities是一个字符串列表。但是今天,当我在一个数据集上运行这个函数时,该数据集在communities列表中有所有整数值,我的函数崩溃了。我花了一段时间才弄明白,当communities是一个整数列表时,c是一个整数,v[c]访问v的第cth元素,而不是名为c的v元素 我可以通过使用

我有一个大函数,它的向量定义如下:

v <- mat.or.vec(length(communities), 1)
names(v) <- communities
编写和测试此代码时,列表
communities
是一个字符串列表。但是今天,当我在一个数据集上运行这个函数时,该数据集在
communities
列表中有所有整数值,我的函数崩溃了。我花了一段时间才弄明白,当
communities
是一个整数列表时,
c
是一个整数,
v[c]
访问
v
的第cth元素,而不是名为
c
v
元素

我可以通过使用类似于
v[as.character(c)]
的方法来解决这个问题。有许多这样的变量面临着同样的问题


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

不知道为什么要命名向量的元素——有点浪费。为什么不直接做呢

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

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

那么,最简单的更改是
for
语句:

for(c in as.character(communities)){
  v[c] = 1
}
或矢量化:

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

v[as.character(communities)]是的,我需要做比分配给1更复杂的事情。我不能包含引号,因为我无法控制社区是如何生成的。
for(c in as.character(communities)){
  v[c] = 1
}
v[as.character(communities)] <- 1
idx <- match(communities, names(v))
v[idx] <- 1