我在R中编写一个采样器,它基本上是一个很大的for循环,对于每个迭代我都要计算一个向量中的转换数.我有一个名为k的向量,它包含0和1,向量中有1000个条目.
我使用了以下非常慢的代码:
#we determine the number of transitions n00,n01,n10,n11
n00=n01=n10=n11=0 #reset number of transitions between states from last time
for(j in 1:(1000-1)){
if(k[j+1]==1 && k[j]==0) {n01<-n01+1}
else { if(k[j+1]==1 && k[j]==1) {n11<-n11+1}
else { if(k[j+1]==0 && k[j]==1) {n10<-n10+1}
else{n00<-n00+1}
}
}
}
Run Code Online (Sandbox Code Playgroud)
因此,每次循环运行时,变量n00,n01,n10,n11计算向量中的转换.例如,n00计算0后跟另一个0的次数.依此类推......
这很慢,我对R很新,所以我在这里绝望.我不明白如何使用grep,如果可能的话.
谢谢您的帮助
尝试这样的事情:
x <- sample(0:1,20,replace = TRUE)
> table(paste0(head(x,-1),tail(x,-1)))
00 01 10 11
4 3 4 8
Run Code Online (Sandbox Code Playgroud)
的head和tail返回向量的部分x:除了最后元件,然后所有,但第一个元素.这意味着相应的元素是连续的对x.
然后paste0只需将每个元素转换为字符向量并粘贴第一个元素,第二个元素等.结果是一个字符向量,其元素如"00","01"等.然后table只计算每个元素中有多少个.
您可以将结果分配给新变量,如下所示:
T <- table(paste0(head(x,-1),tail(x,-1)))
Run Code Online (Sandbox Code Playgroud)
亲自试验每段代码,看看它是如何工作的.运行just head(x,-1)等,看看每件作品的作用.
要解决以下注释,要确保在运行时所有类型都显示计数,请先table将其转换为系数:
x1 <- factor(paste0(head(x,-1),tail(x,-1)),levels = c('00','01','10','11'))
table(x1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
991 次 |
| 最近记录: |