几乎只要你完成了对R的介绍,你可能已经学习了for循环的语法,你被告知要避免R中的循环!
R是一种矢量化语言,所以你被告知永远不要做类似的事情
x = 1:10
y = 2:11
z = rep(NA, 10)
for i in 1:10{
z[i] = x[i] + y[i]
}
Run Code Online (Sandbox Code Playgroud)
而是做
z = x + y
Run Code Online (Sandbox Code Playgroud)
您还被告知使用*ply函数族来进行迭代循环.
我的问题是,除了潜在的代码可读性场景之外,是否还有很好的时间用于R中的循环?
假设我想foreach
在doParallel
包中使用返回两个不同维度的数据框列表,如下所示:
a<-NULL
b<-NULL
for(i in 1:100){
a<-rbind(a,data.frame(input=i,output=i/2))
if(i > 5){
b<-rbind(b,data.frame(input=i,output=i^2))
}
}
list(a,b)
Run Code Online (Sandbox Code Playgroud)
因为foreach
返回一个对象,所以没有(至少对我来说)显而易见的方法来执行上述操作foreach
.
注意:这是我实际使用的问题的一个简化版本,因此通过使用lapply(或沿着这些行的某些东西)来解决问题是行不通的.我的问题的精神是如何做到这一点foreach
.
我有一个字符向量x
,我想以快速的方式变成一行data.table.该命令data.table(x)
返回一列data.table.现在,data.table(t(x))
完成工作,但我想知道是否有更快的方法.
我有两个numpy.array
对象x
,y
其中x.shape
is(P, K)
和y.shape
is (T, K)
。我想对这两个对象进行外部求和,以使结果具有 shape (P, T, K)
。我知道np.add.outer
和np.einsum
功能,但我无法让它们执行我想要的操作。
下面给出了预期的结果。
x_plus_y = np.zeros((P, T, K))
for k in range(K):
x_plus_y[:, :, k] = np.add.outer(x[:, k], y[:, k])
Run Code Online (Sandbox Code Playgroud)
但我必须想象有一种更快的方法!