2017-09-22 55 views
0

我試圖在R中編寫一個函數,給定n帕斯卡三角形的第(如圖所示)行,它返回第n+1行(在相同的形成)。P的帕斯卡三角函數的輸出中的神祕0

我已經寫了下面的功能和測試它n = 4

> pascal.tri <- function(n) { 
+  l <- length(n) 
+  for (i in 1:(l + 1)) { 
+   new.vec[i] <- choose(l, (i - 1)) 
+  } 
+  n[[l+1]] <- new.vec 
+  return(n) 
+ } 
> n <- list(c(1), c(1, 1), c(1, 2, 1), c(1, 3, 3, 1)) 
> pascal.tri(n) 
[[1]] 
[1] 1 

[[2]] 
[1] 1 1 

[[3]] 
[1] 1 2 1 

[[4]] 
[1] 1 3 3 1 

[[5]] 
[1] 1 4 6 4 1 0 

但我不斷收到該隨機0附加到new.vec(因此在列表中)。我一直一行一行地閱讀,使它在各處編輯,並且它不會消失。

我不知道是什麼原因造成這個,所以任何幫助,將不勝感激。

回答

1

你的函數給出了另一個錯誤: 「在new.vec [I]錯誤< - 選擇(升中,(i - 1)):對象 'new.vec' 未找到」。這是因爲new.vec未在pascal.tri範圍內使用之前創建。通過添加new.vec = c(),錯誤消失。

pascal.tri <- function(n) { 
     new.vec = c() 
     l <- length(n) 
     for (i in 1:(l + 1)) { 
      new.vec[i] <- choose(l, (i - 1)) 
     } 
     n[[l+1]] <- new.vec 
     return(n) 
} 

n <- list(c(1), c(1, 1), c(1, 2, 1), c(1, 3, 3, 1)) 

pascal.tri(n) 

結果:

[[1]] 
[1] 1 

[[2]] 
[1] 1 1 

[[3]] 
[1] 1 2 1 

[[4]] 
[1] 1 3 3 1 

[[5]] 
[1] 1 4 6 4 1 

無法重現你的其他錯誤

+0

嗯。出於某種原因,我沒有得到那個錯誤。但是,在函數中初始化new.vec確實也解決了我的問題。那謝謝啦! – thisisourconcerndude

+0

@thisisourconcerndude可能是因爲在全局環境中已經有一個名爲'new.vec'的變量。因此,當'pascal.tri'在函數範圍內找不到該變量時,它會在全局環境中搜索並找到它,因此不會出現錯誤。 – useR