2010-01-01 51 views
4

有人可以指点我在R中使用矢量化编程方法的一个很好的教程。 现在它对我来说非常神奇,我并不真正了解R在做什么。 尤其是关于if语句和寻址值的相邻行。R矢量化编程教程

回答

6

我不知道在矢量编程特定教程R.

的,我有我介绍了几个版本,以高性能计算为R教程here。矢量化代码的好处在分析的上下文中提到,但它并不能解释“如何矢量化代码”。我认为这很难教 - 我最好的选择是阅读其他人的代码。从CRAN中挑选几个包裹,然后四处寻找。

除此之外,关于R和R中的编程的体面的通用文档例如是Pat Burns S Poetry和最近的R Inferno

2

要了解这一点,最好的方法是试验它,因为它是一个交互式环境,并且很容易创建虚拟数据。

至于使相邻行比较,以最简单的办法就是使用-运营商(意为“排除该指数”),以消除在第一和最后一排,在这个例子中:

a <- 1:10 
a[5] <- 0 
a[-1] > a[-length(a)] # compare each row with the preceding value 

如果你想要做一个if语句,你有两个选择:

1)if命令只计算一个值,所以你需要确保它的计算结果为TRUE/FALSE(如使用的全部或任何功能):

if(all(a[-1] > a[-length(a)])) { 
    print("each row is incrementing") 
} else { 
    print(paste("the",which(c(FALSE, a[-1] <= a[-length(a)])),"th row isn't incrementing")) 
} 

2)您可以使用ifelse函数做矢量化if语句。有关更多详细信息,请参阅help("ifelse")。这里有一个例子:

ifelse(a[-1] > a[-length(a)], 1, 0)