2017-03-17 37 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

相关问题