2017-03-17 39 views
0

有沒有辦法在R中用簡單的術語編寫這段代碼?我可以用簡單的術語來寫這個'for'代碼嗎?也許使用'apply'?

也許使用apply

感謝您的任何提示。

for(i in 1:nrow(mat1)){ 
    mat1$c8[i] = formula(mat1$c1[i], mat1$c2[i], mat1$c3[i], mat1$c4[i], mat1$c5[i], mat1$c6[i], mat1$c7[i]) 
} 

數據集:

mat <- data.frame(c1 = sample(1:3, 100, replace = TRUE), 
        c2 = sample(1:4, 100, replace = TRUE), 
        c3 = sample(1:2, 100, replace = TRUE), 
        c4 = sample(1:2, 100, replace = TRUE), 
        c5 = sample(0:1, 100, replace = TRUE), 
        c6 = sample(0:1, 100, replace = TRUE), 
        c7 = sample(0:1, 100, replace = TRUE)) 

mat1 <- mat 

mat1 
+0

你使用的是'stats :: formula'嗎?似乎很奇怪... – Gregor

+0

你可以在這裏發佈mat1的樣本數據嗎? – rnso

+0

@Gregor'公式'只是我創建的函數的名稱。對不起,不清楚這一點。 – user7476990

回答

0

好像你正在試圖做的是有點不尋常,但如果你堅持這樣做,你需要的是Map()mapply()。這些函數將使用多個輸入向量多次調用一個函數,將輸出合併到列表(Map())或最簡單的可能輸出(mapply())中。

mat$c8 <- Map(formula, mat$c1, mat$c2, mat$c3, mat$c4, 
       mat$c5, mat$c6, mat$c7) 

你也可以把所有這些一起放到一行中,儘管我認爲上面更好地傳達了你想要完成的事情。

mat$c8 <- do.call(Map, c(list(formula), mat)) 

有關lapply()家庭的詳細介紹中,Advanced Rfunctionals chapter是相當不錯的。

+0

乾杯@paleolimbot這是非常有用的 – user7476990

相關問題