我正在尝试使用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的任何想法?我在两台机器上关闭了防火墙.
我有一个html文档,我想从本文档中拉出表格并将它们作为数组返回.我正在想象2个函数,一个用于查找文档中的所有html表,另一个用于将html表转换为二维数组.
像这样的东西:
htmltables = get_tables(htmldocument)
for table in htmltables:
array=make_array(table)
Run Code Online (Sandbox Code Playgroud)
有2个捕获:1.数字表每天都有所不同.这些表有各种奇怪的额外格式,如粗体和闪烁标签,随机抛出.
谢谢!
我一直在玩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) 如果我在Linux或Mac上运行R,我可以使用检测可用内核的数量multicore:::detectCores().但是,没有多核功能的Windows版本,所以我不能在Windows上使用这种技术.
如何从R中以编程方式检测Windows机器上的核心数?
我有一个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格式的非常大的数据集.
该矩阵包定义用于相乘的矩阵,即由S4通用功能分派一大堆S4方法%*%,crossprod和tcrossprod.
如何导入"%*%"方法,以便在我自己的包中使用?我跑的时候这段代码失败了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) 我在Excel中有一大列数据.这些数据都应该被视为文本,但在某些单元格中,Excel"神奇地"将数据更改为数字.这是在电子表格的另一部分搞砸我的vlookpup()函数,我需要覆盖Excel的自动数据类型检测.
如果我手动浏览单元格并附加'到每个数字单元格,它就可以工作.我只是不想手工做几千个细胞.
例如,这有效:手动输入 '209
这不起作用:手动输入209,右键单击并格式化为文本.
所以我不是100%确定这是可能的,但我在Ruby和python中找到了一个很好的解决方案,所以我想知道类似的东西是否可以在R中起作用
基本上,给定一个URL,我想呈现该URL,将呈现的屏幕截图作为.png,并将屏幕截图保存到指定的文件夹.我想在无头的linux服务器上做所有这些.
我最好的解决方案是在运行CutyCaptsystem这样的工具,还是存在一个基于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系列函数轻松地并行化它...
我爱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.call或call …