我是否使用了最有效(或正确)的R指令?

我是否使用了最有效(或正确)的R指令?,r,performance,R,Performance,第一个问题,我想直截了当地说 我目前正在处理表,我选择了R,因为它对数据帧大小没有限制,可以对表中的数据执行多个操作。我很高兴,因为我可以随意操作它,合并、concats和行和列操作都很好;但我最近不得不在一个6 mil的表行上运行一个0.00001秒/指令的循环,这花费了一个多小时 也许R的方法一开始就错了,我试图寻找最有效的方法来运行一些操作(使用列表分配而不是c(list,new_element)),但是,据我所知,这不是可以用一些算法(如图或堆)优化的(只是表,您必须遍历所有表)我想知道

第一个问题,我想直截了当地说

我目前正在处理表,我选择了R,因为它对数据帧大小没有限制,可以对表中的数据执行多个操作。我很高兴,因为我可以随意操作它,合并、concats和行和列操作都很好;但我最近不得不在一个6 mil的表行上运行一个0.00001秒/指令的循环,这花费了一个多小时

也许R的方法一开始就错了,我试图寻找最有效的方法来运行一些操作(使用列表分配而不是c(list,new_element)),但是,据我所知,这不是可以用一些算法(如图或堆)优化的(只是表,您必须遍历所有表)我想知道是否有其他一些指令或其他基本方法可以使用我不知道的表(分配、提取…),它们花费更少的时间,或者通过RStudio进行配置以提高性能

这就是循环,如果它有助于理解问题:

my_list <- vector("list",nrow(table[,"Date_of_count"]))
for(i in 1:nrow(table[,"Date_of_count"])){
  my_list[[i]] <- format(as.POSIXct(strptime(table[i,"Date_of_count"]%>%pull(1),"%Y-%m-%d")),format = "%Y-%m-%d")
}

my_list为了提高性能(并正确使用R和表格),答案是混合了以下几点:

  • 使用向量
  • 避免重复转换
  • 如果可能,避免循环并直接在列表/向量上应用函数
我只是将表(意识到,其中包含一些tibble)转换成一个数据帧,并遵循前面提到的键

df <- as.data.frame(table)

df请提供您的数据帧摘录。不要从控制台粘贴它,请使用
dput
。帮助:如果您正在迭代600万行,并且迭代彼此独立,那么您肯定是做错了。因此,不,您没有使用最有效的R指令。R的效率很大一部分在于its矢量化。但是如果您对
循环执行
,您可能会丢失此属性,因为您使用向量的元素进行计算。
我的列表如果您想进一步提高执行时间并以数据库方式处理表,我建议您查看
data.table
包。它使用索引来通过防止无用的拷贝,加快扫描并减少内存使用。