我有一组长度为 n 的向量,例如 n = 3 :
vec1<-c(1,2,3)
vec2<-c(2,2,2)
一个大小为 n ^ n 的多维数组:
threeDarray<-array(0,dim=c(3,3,3))
我想创建一个遍历我的向量集的循环,并将1添加到数组中的相应索引。在分析了上面两个向量之后,数组应该是:
threeDarray[1,2,3]=1
threeDarray[2,2,2]=1
我试图使用多维数组来存储每个向量的出现次数(我的向量是时间序列中的模式)。
答案 0 :(得分:1)
社区是对的(菜鸟是错的)。多维数组不是解决这个问题的方法。
使用列表的代码示例:
freqPatterns<-function(timeSeries,dimension){
temp<-character()
for (i in 1:(length(timeSeries)-dimension+1)){
pattern<-paste(as.character(rank(timeSeries[i:(i+dimension-1)])-1),collapse=", ")
#print(pattern)
temp[[length(temp)+1]] <- pattern
}
freqTable=sort(table(temp),decreasing=T)
return(freqTable)
}
谢谢你们!
答案 1 :(得分:0)
就像你自己发现的那样,我也不会使用multidimensioanl数组。 以下是使用数据框的解决方案:
n=4 # dimension
ll = lapply(vector("list", n), function(x) x=1:n) # build list of vectors (n * 1:n)
df_occurs = expand.grid(ll, KEEP.OUT.ATTRS=F) # get all combinations
df_occurs$occurences = 0
# for-loop for storing the occurences
for(v in list(vec1, vec2)) {
v_match = apply(df_occurs[,1:n], 1, function(x) all(x==v))
df_occurs$occurences[v_match] = 1
}
也许性能是大n的问题。如果可以从矢量中构建字符键,例如
paste(vec1, collapse="")
数据框中的查找会更容易:
df_occurs = data.frame(
key = apply(expand.grid(ll, KEEP.OUT.ATTRS=F), 1, paste, collapse=""),
occurences = 0
)
for(key in list(vec1, vec2)) {
df_occurs$occurences[df_occurs$key==paste(key, collapse="")] = 1
}