相关疑难解决方法(0)

快速读取非常大的表作为数据帧

我有非常大的表(3000万行),我想加载为R中的数据帧 read.table()有很多方便的功能,但似乎实现中有很多逻辑会减慢速度.在我的情况下,我假设我提前知道列的类型,表不包含任何列标题或行名称,并且没有任何我必须担心的病态字符.

我知道在表格中阅读作为列表使用scan()可能非常快,例如:

datalist <- scan('myfile',sep='\t',list(url='',popularity=0,mintime=0,maxtime=0)))
Run Code Online (Sandbox Code Playgroud)

但是我将此转换为数据帧的一些尝试似乎将上述性能降低了6倍:

df <- as.data.frame(scan('myfile',sep='\t',list(url='',popularity=0,mintime=0,maxtime=0))))
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?或者很可能完全不同的方法来解决问题?

import r dataframe r-faq

489
推荐指数
9
解决办法
19万
查看次数

R是否适用于家庭而不是语法糖?

......关于执行时间和/或记忆.

如果不是这样,请使用代码段进行证明.请注意,矢量化的加速不计算在内.增速必须来自apply(tapply,sapply,...)本身.

r apply

146
推荐指数
5
解决办法
2万
查看次数

为什么"vapply"比"sapply"更安全?

文件说

vapply类似于sapply,但具有预先指定的返回值类型,因此使用起来更安全.

你能详细说明为什么它通常更安全,可能提供例子吗?


PS:我知道答案,我已经倾向于避免sapply.我只希望在这里有一个很好的答案,所以我可以指出我的同事.请不要"阅读手册"的答案.

r apply r-faq

81
推荐指数
3
解决办法
2万
查看次数

R:将负值替换为零

我们希望将数组中的所有值设置为负值.我尝试了很多东西,但还没有找到一个有效的解决方案.我想到了一个带有条件的for循环,但这似乎不起作用.

#pred_precipitation is our array
pred_precipitation <-rnorm(25,2,4)     

for (i in nrow(pred_precipitation))
{
  if (pred_precipitation[i]<0) {pred_precipitation[i] = 0}
  else{pred_precipitation[i] = pred_precipitation[i]}
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的提示!

for-loop if-statement r conditional-statements rcpp

19
推荐指数
4
解决办法
5万
查看次数

通过模糊匹配名称创建唯一ID(通过使用R的agrep)

使用R,我尝试在按年份和城市构建的数据集中匹配人名.由于一些拼写错误,无法进行精确匹配,因此我尝试使用agrep()来模糊匹配名称.

数据集的样本块结构如下:

df <- data.frame(matrix( c("1200013","1200013","1200013","1200013","1200013","1200013","1200013","1200013",                             "1996","1996","1996","1996","2000","2000","2004","2004","AGUSTINHO FORTUNATO FILHO","ANTONIO PEREIRA NETO","FERNANDO JOSE DA COSTA","PAULO CEZAR FERREIRA DE ARAUJO","PAULO CESAR FERREIRA DE ARAUJO","SEBASTIAO BOCALOM RODRIGUES","JOAO DE ALMEIDA","PAULO CESAR FERREIRA DE ARAUJO"), ncol=3,dimnames=list(seq(1:8),c("citycode","year","candidate")) ))
Run Code Online (Sandbox Code Playgroud)

整洁的版本:

  citycode year                      candidate
1  1200013 1996      AGUSTINHO FORTUNATO FILHO
2  1200013 1996           ANTONIO PEREIRA NETO
3  1200013 1996         FERNANDO JOSE DA COSTA
4  1200013 1996 PAULO CEZAR FERREIRA DE ARAUJO
5  1200013 2000 PAULO CESAR FERREIRA DE ARAUJO
6  1200013 2000    SEBASTIAO BOCALOM RODRIGUES
7  1200013 2004 …
Run Code Online (Sandbox Code Playgroud)

r fuzzy string-matching agrep

8
推荐指数
1
解决办法
1788
查看次数

有关优化R性能的文档吗?

我对R来说相当新,有一件令我印象深刻的事情是它的运行速度相当慢.有没有优化R的文档?例如,优化Python 在这里描述得非常好.在我的特定情况下,我有兴趣优化R批处理作业.

我当然尝试使用谷歌搜索,但谷歌的R信息并不容易,因为R是一个非常通用的小搜索模式.

optimization r

7
推荐指数
2
解决办法
2050
查看次数

为什么这么慢?(循环在DF行与独立向量)

我有一段代码,总耗时约为30秒,下面的代码大约是27秒.我将违规代码缩小到这个:

d$dis300[i] <- h
Run Code Online (Sandbox Code Playgroud)

所以我换到另一件,现在工作得非常快(正如预期的那样).

我的问题是为什么这对第二个太慢了.数据DF约为7500x18变量

第一:( 27秒过去了)

d$dis300 <- 0
for (i in 1:netot) {
  h <- aaa[d$ent[i], d$dis[i]]
  if (h == 0) writeLines(sprintf("ERROR. ent:%i dis:%i", d$ent[i], d$dis[i]))
  d$dis300[i] <- h
}
Run Code Online (Sandbox Code Playgroud)

第二:(0.2秒过去了)

d$dis300 <- 0
for (i in 1:netot) {
  h <- aaa[d$ent[i], d$dis[i]]
  if (h == 0) writeLines(sprintf("ERROR. ent:%i dis:%i", d$ent[i], d$dis[i]))
  foo[i] <- h
}
d$foo <- foo
Run Code Online (Sandbox Code Playgroud)

你可以看到两者都是"相同的",但有一个人有这个DF而不是一个向量.

任何评论都非常感谢.我来自另一种语言,这让我疯了一会儿.至少我有解决方案,但我希望将来能够防止这类问题.

谢谢你的时间,

performance r

6
推荐指数
1
解决办法
250
查看次数

如何加速R中的文本搜索?

我有一个大文本向量我想搜索特定的字符或短语.正则表达式将永远存在.我该如何快速搜索?

样本数据:

R <- 10^7
garbage <- replicate( R, paste0(sample(c(letters[1:5]," "),10,replace=TRUE),collapse="") )
Run Code Online (Sandbox Code Playgroud)

optimization r

6
推荐指数
2
解决办法
2160
查看次数

R中的循环效率低下

早上好,

我在R中开发了几个月,我必须确保代码的执行时间不会太长,因为我分析了大数据集.

因此,我一直在尝试使用尽可能多的矢量化函数.

但是,我仍然想知道一些事情.

R中代价高昂的不是循环本身吗?我的意思是,当您开始在循环中修改变量时出现问题,例如是否正确?

因此我在思考,如果你只需要在每个元素上运行一个函数(你实际上并不关心结果)会怎么样.例如,在数据库中写入数据.你该怎么办?

1)使用mapply而不将结果存储在任何地方?

2)在向量上做一个循环,只对每个元素应用f(i)?

3)我可能错过了更好的功能吗?

(当然假设你的功能没有最佳矢​​量化).

foreach包裹怎么样?您是否通过使用它获得了任何性能提升?

loops functional-programming r

5
推荐指数
1
解决办法
3712
查看次数

当你有一个额外的变量时,在R中循环以创建许多图

我经常面对的数据有太多的分类变量,无法令人满意地绘制到一个图上.当出现这种情况时,我会写一些东西来循环变量并保存几个特定于该变量的图.

以下示例说明了此过程:

library(tidyr)
library(dplyr)
library(ggplot2)

mtcars <- add_rownames(mtcars, "car")

param<-unique(mtcars$cyl)
for (i in param)
{
mcplt <- mtcars %>% filter(cyl==i) %>% ggplot(aes(x=mpg, y=hp)) +
    geom_point() +
    facet_wrap(~car) +
    ggtitle(paste("Cylinder Type: ",i,sep=""))
  ggsave(mcplt, file=paste("Type",i,".jpeg",sep=""))
}
Run Code Online (Sandbox Code Playgroud)

每当我看到在线参考循环时,每个人似乎总是表明循环通常不是R中的好策略.如果是这种情况,任何人都可以推荐一种更好的方法来实现与上面相同的结果吗?我特别感兴趣的是像SOOOO这样的循环更快的东西.但也许解决方案是这是最好的解决方案.如果有人能改进这一点,我只是很好奇.

提前致谢.

loops r ggplot2

5
推荐指数
1
解决办法
1484
查看次数