2010-01-01 87 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)