2015-02-24 56 views
-5

我對R完全陌生。請你給我解釋下面的代碼嗎?提前謝謝你。你能幫我理解一個R代碼嗎?

patterns <- matrix(c(0,0,0,1,0,1,0,1,1,1,1,0),4,3, byrow = T) 
input <- unlist(lapply(1:100, function(i) { 
    ps <- patterns[sample(nrow(patterns)),] 
    as.vector(t(ps)) 
})) 
teach <- c(input[-1],input[1]) 
data <- cbind(input, teach) 
+1

哪一部分你不明白?如果是字面上的每一行,我建議你從一個基本的R教程開始(也許[An Introduction to R](http://cran.r-project.org/doc/manuals/r-release/R-intro.html) )。要查看任何命令的幫助頁面,可以在R中輸入'?matrix'來爲該特定功能提供幫助。 – MrFlick 2015-02-24 21:48:38

+0

非常感謝。例如,這一行的功能是什麼:c(input [-1],input [1]) – David 2015-02-24 21:50:49

+1

如果這是您的具體問題,請更新您的帖子以表明這一點。然後其他人可以在下面發佈答案,並且您可以接受針對您問題的「正確」答案。 – MrFlick 2015-02-24 21:57:08

回答

1

首先,在一般情況下,

var <- expr 

評估R的表達EXPR並將結果賦予變量變種。如果語句出現在函數內部,則var變成函數局部變量,否則它變成全局變量。

c(0,0,0,1,0,1,0,1,1,1,1,0) 

結合了12個double文字轉換爲在給定的順序一個double向量。

matrix(c(0,0,0,1,0,1,0,1,1,1,1,0),4,3, byrow=T) 

創建從與4行和3列的矢量matrix,在從頂部到底部一個時間填充矩陣的一行(左到右的各行內)。

nrow(patterns) 

返回patterns矩陣中的行數。

sample(nrow(patterns)) 

返回nrow(patterns)元件的integer矢量,由隨機基本上擾整數集的從1到nrow(patterns)

patterns[sample(nrow(patterns)),] 

索引patterns矩陣。這種類型的索引基本上允許您提取原始矩陣的「子矩陣」。逗號左邊的參數指定要選擇的行,而右邊的參數指定要選擇的列。省略的參數等同於指定該維度的所有索引。這個特定的表達式選擇矩陣中的所有行和所有列,但對行順序進行加擾。

t(ps) 

轉置矩陣ps

as.vector(t(ps)) 

將轉置後的矩陣變平成一個向量。請注意,這是按列計算的,這與矩陣最初由向量最初構建的方式相反。請注意,因爲這是封閉函數中的最後一個語句,所以它在執行時會自動成爲函數的返回值。

function(i) { 
    ps <- patterns[sample(nrow(patterns)),] 
    as.vector(t(ps)) 
} 

定義一個函數採用一個參數i並執行上面解釋的兩個語句。請注意,patterns已被此功能有效關閉。

1:100 

創建一個integer向量由100個元素組成,整數從1到100。

lapply(1:100, function(i) { ... }) 

執行在第二個參數爲第一個參數的每個元素給定的一次函數,傳遞元件當它被稱爲該特定元件的功能的第一個參數。在這種情況下,結果是該函數將執行100次,將整數1到100作爲參數傳遞給每個相應調用的參數ilapply()總是返回該函數每次執行的返回值,並組合成一個list對象。

unlist(...) 

list轉換爲單個同質(非列表)對象。這是如何工作的取決於它的參數的確切性質,但在這種情況下,它將把每個函數調用返回的向量合併成一個向量。

input[-1] 

返回除第一個元素以外的整個向量input

input[1] 

返回矢量input的第一個元素。

c(input[-1],input[1]) 

合併了前兩個值。最終結果是第一個元素已被移動到矢量的末尾。

cbind(input, teach) 

執行上述兩個向量的「列綁定」。這意味着每個矢量將被視爲一個length(vector)的1矩陣,並且這兩個矩陣將被合併爲一個length(vector)的二維矩陣。 (如果長度不相等,功能仍然會成功,但它會回收任何短向量輸入並打印警告消息。)

+0

非常感謝你,你非常非常好。 – David 2015-02-24 22:02:48

-3
lmepair.df <- function(fixed, dataframe, name.ID, num.outcomes, method="REML", random.indep=F, random.group=NULL, use.lmer=F, group.weights=NULL, null.model=NULL, return.matrices=F, loglik.only=F, eigen.loglik.only=F, return.sigma=F, score=F, return.loglikfn=F){ 
    require(MASS) 
    if (use.lmer==F) 
    require(assist) # also loads nlme # 
    else 
    require(lme4) 
相關問題