更快的方法将每个条目乘以一列

时间:2017-09-18 02:58:39

标签: r

我有一个包含3列a,b和X的数据框g。我需要将X与a中的每个条目相乘,然后添加到b以创建新变量。现在我正在使用for循环

for(i in 1:N) {
    g$Eout[i] = mean((g$a[i]*g$X+g$b[i]-(g$X)^2)^2);
}

在R中真的很慢。无论如何要更快地做到这一点吗?

1 个答案:

答案 0 :(得分:2)

试试这个:

set.seed(2)
N <- 30
g <- data.frame(a=1:N,b=seq(1,2,length.out=N),X=seq(10,20,length.out=N))
g$new <- sapply(g$X, function(x) mean((g$a * x + g$b - x^2)^2))
head(g)
#   a        b        X      new
# 1 1 1.000000 10.00000 10735.67
# 2 2 1.034483 10.34483 11077.04
# 3 3 1.068966 10.68966 11416.58
# 4 4 1.103448 11.03448 11757.01
# 5 5 1.137931 11.37931 12101.40
# 6 6 1.172414 11.72414 12453.14

由于您希望X的每个值乘以所有g$a等值,您需要求助于某些矢量化优点。 (使用@ thelatemail的建议3e4sapply大约需要7秒...)