我有一个大函数,其矢量定义如下:
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
之类的东西解决这个问题。有许多这样的变量面临同样的问题。
这个问题有更优雅的解决方案吗?
答案 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更复杂的事情。