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