我是R的初学者,我写了这个简单的循环:
for(i in 1:12000){
if(v$piano.tariff[i] == 2) {v$piano.tariff[i] = 0}
else {v$piano.tariff[i] = 1}
}
Run Code Online (Sandbox Code Playgroud)
其中v是数据框,piano.tariff是其中一列.循环的作用是简单地将piano.tariff列的每个值从其initiali值2和5更改为1或0.
现在,代码可以工作,但问题是它的速度非常慢. 完成需要4-5分钟!在C++ o C#这样的循环几乎不需要几秒钟.
为什么这么慢?有更快的方法来实现这个吗?或者只是R很慢,那就是它?
您可能想要使用ifelse哪个是矢量化R函数,它会更快
ifelse(v$piano.tariff==2, 0, 1)
Run Code Online (Sandbox Code Playgroud)
由于您没有提供可重现的示例,因此我无法对性能进行基准测试.
我想你可以尝试一种矢量化的方法.
编辑 感谢Henrik,之前的版本有点偏.我认为新方法还可以.
twos <- v$piano.tariff == 2
notwos <- v$piano.tariff != 2
v[twos, "piano.tariff"] <- 0
v[notwos, "piano.tariff"] <- 1
Run Code Online (Sandbox Code Playgroud)
对你来说足够快?:)