我有一个65,000乘160矩阵,然后我用R中的图像(X)转换成图像.
我还使用选项useRaster = TRUE,这使得绘图批次更快,文件也更小.
但是,文件大小仍然相当大~60 Mb.无论如何要控制R中图像的文件大小?如果是这样,我会喜欢听到如何以及通过约束文件大小而失去多少分辨率.
该文件创建为pdf文件,代码如下:
# ----- Define a function for plotting a matrix ----- #
myImagePlot <- function(x, filename, ...){
dev = "pdf"
#filename = '/home/dnaiel/test.pdf'
if(dev == "pdf") { pdf(filename, version = "1.4") } else{}
min <- min(x)
max <- max(x)
yLabels <- rownames(x)
xLabels <- colnames(x)
title <-c()
# check for additional function arguments
if( length(list(...)) ){
Lst <- list(...)
if( !is.null(Lst$zlim) ){
min <- Lst$zlim[1]
max <- Lst$zlim[2]
}
if( !is.null(Lst$yLabels) ){
yLabels <- …Run Code Online (Sandbox Code Playgroud) 我正在使用插入符合gbm模型.当我打电话时trainedGBM$finalModel$fit,我得到的输出看起来是正确的.
但是当我打电话时predict(trainedGBM$finalModel, origData, type="response"),我会得到非常不同的结果,predict(trainedGBM$finalModel, type="response")即使附加了origData,结果也会产生不同的结果.根据我的思维方式,这些调用应该产生相同的输出.有人可以帮我识别问题吗?
library(caret)
library(gbm)
attach(origData)
gbmGrid <- expand.grid(.n.trees = c(2000),
.interaction.depth = c(14:20),
.shrinkage = c(0.005))
trainedGBM <- train(y ~ ., method = "gbm", distribution = "gaussian",
data = origData, tuneGrid = gbmGrid,
trControl = trainControl(method = "repeatedcv", number = 10,
repeats = 3, verboseIter = FALSE,
returnResamp = "all"))
ntrees <- gbm.perf(trainedGBM$finalModel, method="OOB")
data.frame(y,
finalModelFit = trainedGBM$finalModel$fit,
predictDataSpec = predict(trainedGBM$finalModel, origData, type="response", n.trees=ntrees),
predictNoDataSpec = predict(trainedGBM$finalModel, type="response", n.trees=ntrees))
Run Code Online (Sandbox Code Playgroud)
上面的代码产生以下部分结果:
y …Run Code Online (Sandbox Code Playgroud) 我感觉好像经常在R中,我在附加的数据帧和其他对象之间发现奇怪的命名冲突,附加/分离不能按预期工作(只是附加了相同数据帧的两个副本,甚至不确定它们是否相同)和整个主持的软键入语言特定问题.一小时前工作的代码突然产生新的错误等.
处理这类东西有最好的做法吗?如果我坚持使用单个字母命名数据帧然后根本不附加,我是否会错过效率?
出于某种原因,我通常在Rstudios中运行的代码不再有效.我希望有人有类似的经历,并了解正在发生的事情.
getReturns(c('C','BAC'), start='2004-01-01', end='2008-12-31')
Run Code Online (Sandbox Code Playgroud)
这导致:
Error in unclass(e1) + unclass(e2) :
non-numeric argument to binary operator
Run Code Online (Sandbox Code Playgroud)
我无法在线找到任何解决此问题的stackoverflow.另外,我从2014年7月开始看到最新的文档中没有提到任何内容:
http://cran.r-project.org/web/packages/stockPortfolio/stockPortfolio.pdf
有谁知道这里发生了什么?
我想知道R中"@"(在符号处)的功能.
让我们说:
在下面的例子中,如果我调用perf1@x.values它开始显示全部x.values.但我无法通过调用访问x.values的第二个值perf@x.values[2]!
> str(perf1)
Formal class 'performance' [package "ROCR"] with 6 slots
..@ x.name : chr "False positive rate"
..@ y.name : chr "True positive rate"
..@ alpha.name : chr "Cutoff"
..@ x.values :List of 1
.. ..$ : num [1:3966] 0 0.0005 0.001 0.0015 0.0015 0.002 0.0025 0.0025 0.003 0.0035 ...
..@ y.values :List of 1
.. ..$ : num [1:3966] 0e+00 0e+00 0e+00 0e+00 5e-04 5e-04 5e-04 1e-03 1e-03 1e-03 ... …Run Code Online (Sandbox Code Playgroud) 我最近发现你可以通过if-else块有条件地分配一个值.
y <- if(condition) 1 else 2
Run Code Online (Sandbox Code Playgroud)
我意识到这个用例是有限的:如果你有矢量化代码,你会使用该ifelse函数.有一个性能优势:if-else运行速度比ifelse我机器上的标量情况快35倍(尽管你需要多次调用它才能发现差异很大).
困扰我的是我无法弄清楚为什么这段代码有效 - 我很惊讶它不仅仅是抛出一个错误.
另一个例子表明,如果块的行为与函数类似 - 它们会自动返回块中的最后一个值(尽管您不能return在其中使用语句).
y <- if(TRUE)
{
y <- 3
4
} # y is 4
Run Code Online (Sandbox Code Playgroud)
基于此,我猜想当你输入if块时可能会创建另一个环境,但事实并非如此.
if(TRUE) sys.frames() # NULL
Run Code Online (Sandbox Code Playgroud)
有人能告诉我引擎盖下发生了什么事吗?
这是我在R中使用的数据:
library(Sleuth2)
ex22.20
Run Code Online (Sandbox Code Playgroud)
我试图将"年"列从一系列数字(0-7)转换为两个数字之间的平均值(3.5)
任何帮助将不胜感激.
当使用 caret 的 train 函数拟合 GBM 分类模型时,函数 predictionFunction 基于 0.5 的概率阈值将概率预测转换为因子。
out <- ifelse(gbmProb >= .5, modelFit$obsLevels[1], modelFit$obsLevels[2])
## to correspond to gbmClasses definition above
Run Code Online (Sandbox Code Playgroud)
如果用户试图最大化 ROC 曲线下的面积 (AUROC),这种转换似乎为时过早。虽然敏感性和特异性对应于单个概率阈值(因此需要因子预测),但我更喜欢使用 gbmPredict 的原始概率输出来计算 AUROC。根据我的经验,我很少关心分类模型的校准;我想要信息量最大的模型,无论模型预测“1”与“0”的概率阈值如何。是否可以将原始概率强制用于 AUROC 计算?这看起来很棘手,因为无论使用什么汇总函数都会传递已经是二进制的预测。
我注意到predict()只会在完整案例中创建预测.我已经包含medianImpute在preProcess选项中,例如:
train(outcome ~ .,
data = df,
method = "rf",
tuneLength = 5,
preProcess = c("YeoJohnson", "center", "scale", "medianImpute"),
metric = 'ROC',
trControl = train_ctrl)
}
Run Code Online (Sandbox Code Playgroud)
这是否意味着我应该在训练集之前对缺失的值进行估算?如果没有,我无法为测试集中的所有情况创建预测.我曾在Kuhn博士的书中读过,在交叉验证过程中应该进行预处理......谢谢!