作为R newbie我想过滤具有某些谓词函数的矩阵。 例如,我想过滤掉一行中所有相同的元素。
所以我很乐意编写这样的函数:
af <- function(a){
n <- nrow(a)
m <- ncol(a)
a_Folger <- matrix(0, nrow=n, ncol=m)
for(i in 1:n){
for(j in 2:m){
if( a[i,j] == a[i,j-1]) {
a_Folger[i,j] <- a[i,j]
a_Folger[i,j-1] <- a[i,j]
}
}
}
a_Folger
}
到目前为止这种方法有效,但它没有“R”代码......
有没有更好的“R”方法来实现这一目标?
答案 0 :(得分:2)
你想要的东西闻起来像&#34; R&#34;代码!!! 。你确定吗???好, 在这里:
t(apply(a,1,function(x){ y<-rle(x); y[[2]][y[[1]]==1]<-0; rep(y[[2]],y[[1]]) }))
它为您的af
函数产生了相同的结果并且更快(但在可读性方面没有赢得积分:)。不过,您可以了解如何使用:sample
,[[
,rle
,apply
,rep
,t
和{{1} }。
system.time