我经常发现自己编写的R脚本会产生大量的输出.我发现把这个输出放到它自己的目录中更干净.我在下面写的内容将检查目录是否存在并移入其中,或创建目录然后移入其中.有没有更好的方法来解决这个问题?
mainDir <- "c:/path/to/main/dir"
subDir <- "outputDirectory"
if (file.exists(subDir)){
setwd(file.path(mainDir, subDir))
} else {
dir.create(file.path(mainDir, subDir))
setwd(file.path(mainDir, subDir))
}
Run Code Online (Sandbox Code Playgroud) 我有一组来自一系列离散选择任务的数据,其中包括两个具有三个属性(品牌,价格,性能)的备选方案.根据这些数据,我从后验分布中抽取了1000次,然后我将用它来计算每个人和每次抽签的效用和最终偏好份额.
价格和性能分别在离散水平(-.2,0,.2)和(-.25,0,.25)进行测试.我需要能够在测试的属性级别之间插入实用程序.我们现在假设线性插值在统计上是合理的.换句话说,如果我想测试价格低10%的场景,那么以最有效的方式为价格插入实用工具是什么?我无法想到一种灵活或有效的插值方法.我使用了plyr的mdply函数的mapply()方法
这是一些数据和我目前的方法:
library(plyr)
#draws from posterior, 2 respondents, 2 draws each
draw <- list(structure(c(-2.403, -2.295, 3.198, 1.378, 0.159, 1.531,
1.567, -1.716, -4.244, 0.819, -1.121, -0.622, 1.519, 1.731, -1.779,
2.84), .Dim = c(2L, 8L), .Dimnames = list(NULL, c("brand_1",
"brand_2", "price_1", "price_2", "price_3", "perf_1", "perf_2",
"perf_3"))), structure(c(-4.794, -2.147, -1.912, 0.241, 0.084,
0.31, 0.093, -0.249, 0.054, -0.042, 0.248, -0.737, -1.775, 1.803,
0.73, -0.505), .Dim = c(2L, 8L), .Dimnames = list(NULL, c("brand_1",
"brand_2", "price_1", "price_2", "price_3", "perf_1", "perf_2",
"perf_3"))))
#define attributes …Run Code Online (Sandbox Code Playgroud) 我有一个data.frame,我想写出来.我的尺寸data.frame是256行乘65536列.什么是更快的替代品write.csv?
我试图从日期中减去n个月,如下所示:
maturity <- as.Date("2012/12/31")
m <- as.POSIXlt(maturity)
m$mon <- m$mon - 6
Run Code Online (Sandbox Code Playgroud)
但结果日期是01-Jul-2012,而不是30-Jun-2012我所期望的.有没有简短的方法来获得这样的结果?
提前致谢
这个问题说明了一切 - 我想要一个充满data.frames的列表对象,并将每个data.frame写入一个单独的.csv文件,其中.csv文件的名称对应于列表对象的名称.
这是一个可重现的例子和我迄今为止编写的代码.
df <- data.frame(
var1 = sample(1:10, 6, replace = TRUE)
, var2 = sample(LETTERS[1:2], 6, replace = TRUE)
, theday = c(1,1,2,2,3,3)
)
df.daily <- split(df, df$theday) #Split into separate days
lapply(df.daily, function(x){write.table(x, file = paste(names(x), ".csv", sep = ""), row.names = FALSE, sep = ",")})
Run Code Online (Sandbox Code Playgroud)
这是R吐出的错误消息的顶部
Error: Results must have one or more dimensions.
In addition: Warning messages:
1: In if (file == "") file <- stdout() else if (is.character(file)) { :
the condition has …Run Code Online (Sandbox Code Playgroud) 我在ggplot中有一条水平线,我想在y轴上标注它的值(7.1).
library(ggplot2)
df <- data.frame(y=c(1:10),x=c(1:10))
h <- 7.1
plot1 <- ggplot(df, aes(x=x,y=y)) + geom_point()
plot2 <- plot1+ geom_hline(aes(yintercept=h))
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助.
我正在尝试使用R来估计具有手动规范的多项logit模型.我找到了一些允许您在此处或此处估算MNL模型的软件包.
我发现在"滚动"自己MLE功能的一些其他著作在这里.然而,从我的挖掘 - 所有这些功能和包依赖于内部optim功能.
在我的基准测试中,optim是瓶颈.使用具有约16000个观测值和7个参数的模拟数据集,R在我的机器上花费大约90秒.Biogeme中的等效模型需要大约10秒钟.在Ox报告自己的代码的同事报告这个模型的时间约为4秒.
有没有人有编写自己的MLE功能的经验,或者可以指出我的方向优化超出默认optim功能(没有双关语)?
如果有人想要R代码重新创建模型,请告诉我 - 我会提供它.我没有提供它,因为它与优化optim功能和保留空间的问题没有直接关系......
编辑:感谢大家的想法.基于下面的无数评论,我们能够将R与Biogeme放在同一个球场,以获得更复杂的模型,对于我们运行的几个更小/更简单的模型,R实际上更快.我认为这个问题的长期解决方案是编写一个单独的最大化函数,它依赖于fortran或C库,但我肯定对其他方法持开放态度.
我使用RStudio将一个csv文件导入到R中,我试图用每场比赛的分数来计算每场比赛的得分.然而,每场比赛的分钟数格式为mm:ss,我很难找到如何将其转换为十进制形式.
请帮忙!
我试图用来geom_point说明我的数据计数.我还想在图表中注明一些要点geom_text.当我添加调用时geom_text,它似乎正在绘制图例中点下方的内容.我试过扭转层的顺序无济于事.我无法理解为什么会这样做.谁看过这个吗?
set.seed(42)
df <- data.frame(x = 1:10
, y = 1:10
, label = sample(LETTERS,10, replace = TRUE)
, count = sample(1:300, 10, replace = FALSE)
)
p <- ggplot(data = df, aes(x = x, y = y, size = count)) + geom_point()
p + geom_text(aes(label = label, size = 150, vjust = 2))
Run Code Online (Sandbox Code Playgroud)

编辑:基于aL3xa的答案,我在下面修改了他的语法.不完美,但越来越近了.我还没有找到一种方法来为列或行创建xtable accept\multicolumn {}参数.似乎Hmisc在幕后处理这些类型的任务,但看起来有点想要了解那里发生了什么.有没有人有Hmisc乳胶功能的经验?
ctab <- function(tab, dec = 2, margin = NULL) {
tab <- as.table(tab)
ptab <- paste(round(prop.table(tab, margin = margin) * 100, dec), "%", sep = "")
res <- matrix(NA, nrow = nrow(tab) , ncol = ncol(tab) * 2, byrow = TRUE)
oddc <- 1:ncol(tab) %% 2 == 1
evenc <- 1:ncol(tab) %% 2 == 0
res[,oddc ] <- tab
res[,evenc ] <- ptab
res <- as.table(res)
colnames(res) <- rep(colnames(tab), each = 2)
rownames(res) <- rownames(tab)
return(res)
} …Run Code Online (Sandbox Code Playgroud)