小编Zac*_*ach的帖子

使用sendmailR包从R发送电子邮件

我正在尝试使用sendmailR包从R发送电子邮件.当我在我的电脑上运行它时,下面的代码工作正常,我收到了电子邮件.但是,当我用我的macbook pro运行它时,它失败并出现以下错误:

library(sendmailR)
from <- sprintf("<sendmailR@%s>", Sys.info()[4])
to <- "<myemail@gmail.com>"
subject <- "TEST"
sendmail(from, to, subject, body,
    control=list(smtpServer="ASPMX.L.GOOGLE.COM"))

Error in socketConnection(host = server, port = port, blocking = TRUE) : 
  cannot open the connection
In addition: Warning message:
In socketConnection(host = server, port = port, blocking = TRUE) :
  ASPMX.L.GOOGLE.COM:25 cannot be opened
Run Code Online (Sandbox Code Playgroud)

关于为什么这可以在PC上运行但不是mac的任何想法?我在两台机器上关闭了防火墙.

email macos r

14
推荐指数
1
解决办法
6155
查看次数

如何在python中将HTML表转换为数组

我有一个html文档,我想从本文档中拉出表格并将它们作为数组返回.我正在想象2个函数,一个用于查找文档中的所有html表,另一个用于将html表转换为二维数组.

像这样的东西:

htmltables = get_tables(htmldocument)
for table in htmltables:
    array=make_array(table)
Run Code Online (Sandbox Code Playgroud)

有2个捕获:1.数字表每天都有所不同.这些表有各种奇怪的额外格式,如粗体和闪烁标签,随机抛出.

谢谢!

html python

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

覆盖R控制台中的当前输出

我一直在玩R函数txtProgressBar().如何劫持函数覆盖控制台中当前输出的能力?

即进度条更新如下:

> some R function
============
Run Code Online (Sandbox Code Playgroud)

> some R function
========================
Run Code Online (Sandbox Code Playgroud)

> some R function
============
========================
Run Code Online (Sandbox Code Playgroud)

例如,如何编写将在控制台中显示当前时间的函数:

> some R function
13:01
Run Code Online (Sandbox Code Playgroud)

> some R function
13:02
Run Code Online (Sandbox Code Playgroud)

> some R function
13:01
13:01
13:01
13:01
13:02
13:02
13:02
13:02
Run Code Online (Sandbox Code Playgroud)

console time r date

13
推荐指数
2
解决办法
6708
查看次数

检测Windows上的核心数

如果我在Linux或Mac上运行R,我可以使用检测可用内核的数量multicore:::detectCores().但是,没有多核功能的Windows版本,所以我不能在Windows上使用这种技术.

如何从R中以编程方式检测Windows机器上的核心数?

windows multicore r

13
推荐指数
2
解决办法
9731
查看次数

使用data.table聚合子总计和总计

我有一个data.tableR:

library(data.table)
set.seed(1)
DT = data.table(
  group=sample(letters[1:2],100,replace=TRUE), 
  year=sample(2010:2012,100,replace=TRUE),
  v=runif(100))
Run Code Online (Sandbox Code Playgroud)

按组和年份将这些数据汇总到汇总表中简单而优雅:

table <- DT[,mean(v),by='group, year']
Run Code Online (Sandbox Code Playgroud)

但是,将这些数据聚合到汇总表(包括小计和总计)中会稍微困难一些,而且不那么优雅:

library(plyr)
yearTot <- DT[,list(mean(v),year='Total'),by='group']
groupTot <- DT[,list(mean(v),group='Total'),by='year']
Tot <- DT[,list(mean(v), year='Total', group='Total')]
table <- rbind.fill(table,yearTot,groupTot,Tot)
table$group[table$group==1] <- 'Total'
table$year[table$year==1] <- 'Total'
Run Code Online (Sandbox Code Playgroud)

这会产生:

table[order(table$group, table$year), ]
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以使用data.table指定小计和总计,例如plyr的margins=TRUE命令?我更喜欢在我的数据集上使用data.table而不是plyr,因为它是我已经拥有的data.table格式的非常大的数据集.

aggregate r plyr data.table

13
推荐指数
4
解决办法
5262
查看次数

从Matrix包导入S4功能

矩阵包定义用于相乘的矩阵,即由S4通用功能分派一大堆S4方法%*%,crossprodtcrossprod.

如何导入"%*%"方法,以便在我自己的包中使用?我跑的时候这段代码失败了devtools::document():

#' @title my function
#'
#' @description Does magic Matrix stuff
#' @import methods
#' @importFrom Matrix "%*%" Diagonal
myfun <- function(x, y){
  x %*% Diagonal(x=y)
}
Run Code Online (Sandbox Code Playgroud)

如果x是稀疏矩阵,我想确保此函数使用Matrix包中的稀疏矩阵乘法方法.但是当我运行时,devtools::document()我收到以下错误:

Updating mypackage documentation
Loading mypackage
Error: object ‘%*%’ is not exported by 'namespace:Matrix'
Run Code Online (Sandbox Code Playgroud)

r package sparse-matrix s4 roxygen2

13
推荐指数
1
解决办法
569
查看次数

强制Excel 2007将列中的所有值视为文本

我在Excel中有一大列数据.这些数据都应该被视为文本,但在某些单元格中,Excel"神奇地"将数据更改为数字.这是在电子表格的另一部分搞砸我的vlookpup()函数,我需要覆盖Excel的自动数据类型检测.

如果我手动浏览单元格并附加'到每个数字单元格,它就可以工作.我只是不想手工做几千个细胞.

例如,这有效:手动输入 '209

这不起作用:手动输入209,右键单击并格式化为文本.

excel types

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

如何使用R截取网站?

所以我不是100%确定这是可能的,但我在Rubypython中找到了一个很好的解决方案,所以我想知道类似的东西是否可以在R中起作用

基本上,给定一个URL,我想呈现该URL,将呈现的屏幕截图作为.png,并将屏幕截图保存到指定的文件夹.我想在无头的linux服务器上做所有这些.

我最好的解决方案是在运行CutyCaptsystem这样的工具,还是存在一个基于R的工具集来帮我解决这个问题?

r rcurl httr

12
推荐指数
2
解决办法
4067
查看次数

并行化R中的滚动窗口回归

我正在运行一个非常类似于以下代码的滚动回归:

library(PerformanceAnalytics)
library(quantmod)
data(managers)

FL <- as.formula(Next(HAM1)~HAM1+HAM2+HAM3+HAM4)
MyRegression <- function(df,FL) {
  df <- as.data.frame(df)
  model <- lm(FL,data=df[1:30,])
  predict(model,newdata=df[31,])
}

system.time(Result <- rollapply(managers, 31, FUN="MyRegression",FL,
    by.column = FALSE, align = "right", na.pad = TRUE))
Run Code Online (Sandbox Code Playgroud)

我有一些额外的处理器,所以我试图找到一种方法来并行化滚动窗口.如果这是一个非滚动回归,我可以使用apply系列函数轻松地并行化它...

finance r quantmod

11
推荐指数
1
解决办法
2386
查看次数

替代do.call用于大型数据集

我爱do.call.我喜欢能够将函数参数存储在列表中,然后将它们映射到给定的函数.

例如,我经常发现自己使用这种模式来拟合不同预测模型的列表,每个模型都有一些共享和一些独特的参数:

library(caret)
global_args <- list(
  x=iris[,1:3],
  y=iris[,4],
  trControl=trainControl(
    method='cv',
    number=2,
    returnResamp='final',
    )
  )
global_args$trControl$index <- createFolds(
  global_args$y,
  global_args$trControl$number
  )
model_specific_args <- list(
  'lm' = list(method='lm', tuneLength=1),
  'nn' = list(method='nnet', tuneLength=3, trace=FALSE),
  'gbm' = list(
    method='gbm',
    verbose=FALSE,
    tuneGrid=expand.grid(
      n.trees=1:100,
      interaction.depth=c(2, 3),
      shrinkage=c(.1, .01)
    )
  )
)
list_of_models <- lapply(model_specific_args, function(args){
  return(do.call(train, c(global_args, args), quote=TRUE))
})
resamps <- resamples(list_of_models)
dotplot(resamps, metric='RMSE')
Run Code Online (Sandbox Code Playgroud)

global_args包含对所有模型都相同的参数,并model_specific_args包含特定于模型的参数列表.我循环model_specific_args,连接每个元素global_args,然后用于do.call将最终参数列表传递给模型拟合函数.

虽然这段代码在视觉上很优雅,但它的性能非常糟糕:do.call将整个x数据集按字面序列化为文本,然后将其传递给模型拟合函数.如果x是几GB的数据,则使用疯狂的RAM并且通常会失败.

print(list_of_models[[1]]$call)
Run Code Online (Sandbox Code Playgroud)

有没有办法将参数列表传递给R中的函数,而不使用do.callcall …

r do.call

10
推荐指数
1
解决办法
698
查看次数