有关如何在R程序中创建循环计数器的一些信息性帖子.但是,在使用带有"foreach()"的并行化版本时,如何创建类似的功能?
我是一个R用户,我经常发现我需要编写需要对大型数据集进行子集化的函数(数百万行).当我在大量观察中应用这些函数时,如果我不小心如何实现它,它会非常耗时.
为此,我有时使用data.table包,这比使用数据帧的子集提供了更快的速度.最近,我开始尝试使用像RMySQL这样的包,将一些表推送到mysql,并使用该包运行sql查询并返回结果.
我发现性能改进不一.对于较小的数据集(数百万),似乎将数据加载到data.table并设置正确的密钥可以实现更快的子集化.对于较大的数据集(10到100万),看起来向mysql发送查询的速度更快.
想知道是否有人知道哪种技术应该更快地返回简单的子集或聚合查询,以及这是否应该取决于数据的大小?我知道在data.table中设置键有点类似于创建索引,但除此之外我没有更多的直觉.
我试图在R(而不是data.frame)中对data.table(来自包data.table)进行子集化.我有一个4位数的年份作为关键.我想通过一系列的几年来分组.例如,我想要提取1999年,2000年,2001年的所有记录.
我试过传递DT[J(year)]以下二进制搜索语法:
1999,2000,2001
c(1999,2000,2001)
1999, 2000, 2001
Run Code Online (Sandbox Code Playgroud)
但这些似乎都不起作用.任何人都知道如何做一个子集,你想要选择的年份不只是1年,而是多年?
我使用谷歌日历,但我从那里的别名电子邮件发送电子邮件。当我发送日历邀请时,它说它来自我的谷歌电子邮件地址。有什么办法可以让它“从”别名电子邮件地址发送出去吗?
我想应用一个函数(这个解释为"foo")将数据向量转换为另一个值.此函数将数据作为输入,并需要将表单提交到网页.有时候,这很快就会发生,而其他时候,这可能需要很长时间.我想以跳过花费太长时间的项目的方式运行for循环(或等效的apply函数).我尝试使用以下内容限制循环运行的时间,然后跳到下一个5秒:
pb <- txtProgressBar(min = 1, max = 100, style = 3)
storage <- matrix(nrow = sample.length, ncol = 2)
for(i in 1:100){
s <- Sys.time()
storage[i,] <- try(foo(data.vec[i]), TRUE)
if (Sys.time() - s >5) {next}
# update progress bar
setTxtProgressBar(pb, i)
}
close(pb)
Run Code Online (Sandbox Code Playgroud)
我认为我不能理解如何在for循环中应用'next'条件.我们已经寻找更清楚的解释,但这里没有运气.
我正在处理大型数据集(数百万条记录,有时是数百万条记录),并希望使用与R链接良好的数据库程序.我正在尝试在mysql和sqlite之间做出决定.数据是静态的,但我需要做很多查询.
在这个指向sqlite帮助的链接中,它指出:
"默认页面大小为1024字节,SQLite数据库的大小限制为2 TB(241字节).即使它可以处理更大的数据库,SQLite也会将整个数据库存储在一个磁盘文件中,并且许多文件系统限制了最大值如果你正在考虑这么大的数据库,你最好考虑使用一个客户端/服务器数据库引擎,它将内容分布在多个磁盘文件中,也可能跨多个卷."
我不确定这意味着什么.当我尝试使用mysql和sqlite时,似乎mysql速度更快,但我还没有构建非常严格的速度测试.我想知道,由于数据集的大小,mysql对我来说是否比sqlite更好.上面的描述似乎表明可能是这种情况,但我的数据不在2TB附近.
有一个关于stackoverflow的讨论触及了这个并引用了相同的sqlite信息页面,但它并没有完全解决这个问题.
我非常感谢从文件系统中理解这个最大文件大小限制的任何见解,以及它如何影响索引表和运行查询的速度.这可以帮助我决定使用哪个数据库进行分析.
我试图在以下字符串中抓取“Expertise”之后和“Most”之前的词:
"Top Skills & Expertise Project Management Cooking Childcare Tutoring Most Recommended"
Run Code Online (Sandbox Code Playgroud)
基于示例,我认为我应该使用这个:
(?<=Top Skills & Expertise).*(Most Recommended?=)
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用,所以我使用了这个:
(?<=)Top Skills & Expertise.*Most Recommended(?=)
Run Code Online (Sandbox Code Playgroud)
当然,在第二种情况下,“顶级技能和专长”和“最推荐”被消耗和返回,这是我不想要的。
我确定我在这里遗漏了一些简单的东西。对正则表达式新手的任何指导将不胜感激!
谢谢!
我试图使用正则表达式使用stringr包来提取一些文本.出于某种原因,我得到了'无效的正则表达式'错误.我在一些网站测试工具中尝试了正则表达式,它似乎在那里工作.我想知道是否有一些关于regex如何在R中工作的独特之处,特别是在stringr包中.
这是一个例子:
string <- c("MARKETING: Vice President", "FINANCE: Accountant I",
"OPERATIONS: Plant Manager")
pattern <- "[A-Z]+(?=:)"
test <- gsub(" ","",string)
results <- str_extract(test, pattern)
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用.我想在其中没有":"的情况下获得"营销","财务"和"运营".这就是我使用前瞻语法的原因.我意识到我可以解决这个问题:
pattern <- "[A-Z]+(:)"
test <- gsub(" ","",string)
results <- gsub(":","",str_extract(test, pattern))
Run Code Online (Sandbox Code Playgroud)
但我预计在不久的将来,我可能需要使用外观来处理比这更复杂的情况.
我是否需要通过一些转义或某些东西修改正则表达式才能使其工作?
几个月前,我在一个演示文稿中看到了一个可爱的R推文演示.演示者使用的临时代码在这里:
http://www.r-bloggers.com/twitter-from-r%E2%80%A6-sure-why-not/
代码很简短:库("RCurl")选择< - curlOptions(header = FALSE,userpwd ="username:password",netrc = FALSE)
tweet <- function(status){
method <- "http://twitter.com/statuses/update.xml?status="
encoded_status <- URLencode(status)
request <- paste(method,encoded_status,sep = "")
postForm(request,.opts = opts)
}
Run Code Online (Sandbox Code Playgroud)
使用此功能,您只需使用更新功能即可发送推文:
tweet("This tweet comes from R! #rstats")
Run Code Online (Sandbox Code Playgroud)
我认为这可能是宣布长期工作完成时的有用方式.我试图在我的机器上运行它,我收到一些错误:
[1]"\n \n不支持基本身份验证\n \n"attr(,"Content-Type")charset"application/xml""utf-8"警告消息:在postForm中(请求,.opts = opts ):没有输入传递给表单
我想知道在这个Twitter端是否有一些变化,这使得这段代码产生了这个错误?我不太了解让R与网页交谈,所以任何指导都非常感谢!!
Ë