我有一个data.table DT,其current(F0YR)和next(F1YR)会计年度末(FYE)编码为整数.由于每个下一个FYE最终将成为当前的FYE,因此整数将在列F1YR和中F0YR.此外,我的数据包含每月观察,因此相同的FYE将多次出现在数据集中:
library(data.table)
DT <- data.table(ID = rep(c("A", "B"), each=9),
MONTH = rep(100L:108L, times=2),
F0YR = rep(c(1L, 4L, 7L), each=3, times=2),
F1YR = rep(c(4L, 7L, 9L), each=3, times=2),
value = c(rep(1:5, each=3), 6, 6, 7),
key = "ID,F0YR")
DT
ID MONTH F0YR F1YR value
[1,] A 100 1 4 1
[2,] A 101 1 4 1
[3,] A 102 1 4 1
[4,] A 103 4 7 2
[5,] A …Run Code Online (Sandbox Code Playgroud) 我有很多行,每行都计算出非线性函数的uniroot.我有一个四核Ubuntu机器,它已经两天没有停止运行我的代码了.毫不奇怪,我正在寻找加快速度的方法;-)
经过一些研究,我注意到目前只使用了一个核心,并且可以进行并行化.深入挖掘,我得出的结论(可能是错误的?)包装foreach并不是真正意义上的问题,因为产生了太多的开销(例如,参见SO).multicore对于Unix机器来说,一个很好的替代方案.特别是,在pvec检查帮助页面后,该功能似乎是最有效的功能.
但是,如果我理解正确,此函数只需要一个向量并相应地将其拆分.我需要一个可以并行化的函数,但需要多个向量(或者data.frame代替),就像mapply函数一样.我错过了什么吗?
这是我想要做的一个小例子:(请注意,我plyr在这里包含一个示例,因为它可以替代基本mapply函数,并且它有一个并行化选项.但是,它在我的实现和内部调用较慢,它调用foreach并行化,所以我认为它无济于事.这是正确的吗?)
library(plyr)
library(foreach)
n <- 10000
df <- data.frame(P = rnorm(n, mean=100, sd=10),
B0 = rnorm(n, mean=40, sd=5),
CF1 = rnorm(n, mean=30, sd=10),
CF2 = rnorm(n, mean=30, sd=5),
CF3 = rnorm(n, mean=90, sd=8))
get_uniroot <- function(P, B0, CF1, CF2, CF3) {
uniroot(function(x) {-P + B0 + CF1/x + CF2/x^2 + CF3/x^3},
lower = 1,
upper …Run Code Online (Sandbox Code Playgroud) 我的代码之前运行没有问题,在调用dcast公式时崩溃了.在玩完之后,我发现即使是dcast帮助页面中的最小例子也不适合我了.更确切地说:
#Air quality example
names(airquality) <- tolower(names(airquality))
aqm <- melt(airquality, id=c("month", "day"), na.rm=TRUE)
acast(aqm, day ~ month ~ variable)
acast(aqm, month ~ variable, mean)
Run Code Online (Sandbox Code Playgroud)
最后一行产生以下错误:
Error in vaggregate(.value = value, .group = overall, .fun = fun.aggregate, :
could not find function ".fun"
Run Code Online (Sandbox Code Playgroud)
这是我的sessionInfo():
R version 2.13.1 (2011-07-08)
Platform: x86_64-pc-mingw32/x64 (64-bit)
locale:
[1] C
attached base packages:
[1] grid stats graphics grDevices utils datasets methods base
other attached packages:
[1] ggplot2_0.8.9 proto_0.3-9.2 reshape2_1.1 xtable_1.5-6 reshape_0.8.4 plyr_1.5.2 lubridate_0.2.5
loaded via a namespace …Run Code Online (Sandbox Code Playgroud) 我正在编写蒙特卡罗模拟,这应该给用户一些灵活性.因此,我希望用户能够在模拟运行之前指定随机数的具体概率分布.然而,此时用户不知道需要多少随机数.
我的想法是从用户那里获得一个调用对象,创建一个随机数,然后根据需要在内部创建尽可能多的随机数.但是,除了一个循环我不能得到任何其他解决方案,但感觉这是因为我错过了一些东西.基本上,我有两个问题:
1)调用对象的想法是好的吗?我仍在研究这个项目,所以我仍然可以改变设置,但我需要一个非常直观的解决方案.
2)如果这是一个好主意,是否有更优雅的方法将随机数扩展为大小为nrMCS的向量?
我们举一个例子:
#That's what I would get from the user with my current set-up:
rnd_call <- call("rnorm", 1, mean=0.1, sd=0.01)
#To create nrMCS random numbers, that's my best shot so far:
nrMCS <- 100
rnd_vec <- as.numeric(nrMCS)
for (i in 1:nrMCS){rnd_vec[i] <- eval(rnd_call)}
rnd_vec
[1] 0.09695170 0.11752132 0.11548925 0.11205948 0.10657986 0.12017120 0.09518435
...
#Question: Is there are more elegant way?
#I tried the following, but it fails for certain reasons
rep(eval(rnd_call), nrMCS) #DOES NOT WORK: Repeats ONE …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试基于本教程模块化我闪亮的应用程序.在我的实际应用程序中,我有两个selectInput允许用户选择第一个和最后一个季度结束日期,根据该日期计算某些数据集的某些统计信息.由于可用的季度结束日期取决于实际的数据集,并且正在使用不同的数据集,因此我在服务器功能choices中selectInput动态提供参数.过程如下:
selectInput根据数据集的可用季度结束日期动态创建对象.我在我的应用程序中一遍又一遍地执行此操作以获取不同的数据集,这就是我现在想要创建模块的原因.但是,我很难获得所选的季度结束日期,然后我可以使用它来限制我的数据集.
下面,请找一个说明我问题的小应用程序.
app.R部分
source("module.R")
ui <- fixedPage(
selectQuartersUI("test"),
textOutput("summary")
)
server <- function(input, output, session) {
### Here I want to save the selected input
#(Use 1:10 for illustration purposes, this would actually be
#quarter end-dates that are dynamic based on the specific data set)
testValues <- callModule(selectQuarters, "test", 1:10)
### Use the selected input (here to simply output them, in actual app to limit data set)
#Using …Run Code Online (Sandbox Code Playgroud) 我有以下匹配问题:我有两个 data.frames,一个每个月都有一个观察(每个公司 ID),一个每个季度都有一个观察(每个公司 ID;注意这个季度意味着财政季度;因此 1Q = Jan, 2 月、3 月不一定正确,而且,一个财政季度不一定是 3 个月长)。
对于每个月和公司,我都想获得该季度的正确值。因此,几个月对于一个季度具有相同的值。作为示例,请参见下面的代码:
monthlyData <- data.frame(ID = rep(c("A", "B"), each = 5),
Month = rep(1:5, times = 2),
MonValue = 1:10)
monthlyData
ID Month MonValue
1 A 1 1
2 A 2 2
3 A 3 3
4 A 4 4
5 A 5 5
6 B 1 6
7 B 2 7
8 B 3 8
9 B 4 9
10 B 5 10
#Quarterly data, i.e. the value …Run Code Online (Sandbox Code Playgroud) 我想做以下两个步骤:
这是我的方法:
set.seed(123)
#Just generate random AR(1) time series; based on this, I want to estimate the parameters
ts_AR <- arima.sim(n=10000, list(ar=c(0.5)))
#1. Estimate parameters with arima()
model_AR <- arima(ts_AR, order=c(1,0,0))
#Looks actually good
model_AR
Series: ts_AR
ARIMA(1,0,0) with non-zero mean
Coefficients:
ar1 intercept
0.4891 -0.0044
s.e. 0.0087 0.0195
sigma^2 estimated as 0.9974: log likelihood=-14176.35
AIC=28358.69 AICc=28358.69 BIC=28380.32
#2. Simulate based on model
arima.sim(model=model_AR, n = 100)
Error in arima.sim(model = model_AR, n = 100) :
'ar' part …Run Code Online (Sandbox Code Playgroud) 我正在开发一个带有大量情节的 Shiny 应用程序。每当我更改某些输入时,绘图在绘制之前很短的时间内都不会显示,而是显示了一条相当突出的红色错误消息。在这里可以看到它的外观 。
肯定有解决此问题的解决方案,请参见此处的示例。此外,来自 RStudio 的 Joe Cheng 在 Shiny 开发者大会上的最后十分钟演讲中,讨论了具有该功能的解决方案req()(请参阅此处)。然而,后者在第一次尝试时并没有完全解决问题,前者需要更多的工作,因为我必须在每个情节中添加 if 子句。
现在,我认为我实际上可以接受错误消息,因为此后该图显示得相当快。但是,有没有机会改变颜色。如果这是灰色和深蓝色,它会更不引人注目。