小编Chr*_*h_J的帖子

如何最好地将data.table的一列与同一data.table的另一列连接?

我的数据

我有一个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)

r data.table

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

是否有一种有效的并行化mapply方法?

我有很多行,每行都计算出非线性函数的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)

parallel-processing r

6
推荐指数
1
解决办法
3629
查看次数

从reshape2帮助页面运行示例的错误消息

我的代码之前运行没有问题,在调用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)

r reshape

5
推荐指数
1
解决办法
2826
查看次数

创建随机数的向量(在运行时未知的向量的大小)

我正在编写蒙特卡罗模拟,这应该给用户一些灵活性.因此,我希望用户能够在模拟运行之前指定随机数的具体概率分布.然而,此时用户不知道需要多少随机数.

我的想法是从用户那里获得一个调用对象,创建一个随机数,然后根据需要在内部创建尽可能多的随机数.但是,除了一个循环我不能得到任何其他解决方案,但感觉这是因为我错过了一些东西.基本上,我有两个问题:

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)

r

5
推荐指数
1
解决办法
6527
查看次数

如何从callModule函数返回闪亮的输入值

我目前正在尝试基于本教程模块化我闪亮的应用程序.在我的实际应用程序中,我有两个selectInput允许用户选择第一个和最后一个季度结束日期,根据该日期计算某些数据集的某些统计信息.由于可用的季度结束日期取决于实际的数据集,并且正在使用不同的数据集,因此我在服务器功能choicesselectInput动态提供参数.过程如下:

  1. selectInput根据数据集的可用季度结束日期动态创建对象.
  2. 使用选定的季度结束日期来相应地限制特定数据集.

我在我的应用程序中一遍又一遍地执行此操作以获取不同的数据集,这就是我现在想要创建模块的原因.但是,我很难获得所选的季度结束日期,然后我可以使用它来限制我的数据集.

下面,请找一个说明我问题的小应用程序.

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)

r shiny

5
推荐指数
1
解决办法
1612
查看次数

如何将两个 data.frames 与一个不完全匹配的标识符匹配(一个标识符必须在另一个的范围内)

我有以下匹配问题:我有两个 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)

r data.table

4
推荐指数
1
解决办法
1169
查看次数

如何用arima.sim和估计模型模拟AR(1)过程?

我想做以下两个步骤:

  1. 基于给定的时间序列,我想校准AR(1)过程,即我想估计参数.
  2. 基于估计的参数,我想模拟AR(1)过程.

这是我的方法:

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)

r

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

更改闪亮的红色错误消息的颜色

我正在开发一个带有大量情节的 Shiny 应用程序。每当我更改某些输入时,绘图在绘制之前很短的时间内都不会显示,而是显示了一条相当突出的红色错误消息。在这里可以看到它的外观 。

肯定有解决此问题的解决方案,请参见此处的示例。此外,来自 RStudio 的 Joe Cheng 在 Shiny 开发者大会上的最后十分钟演讲中,讨论了具有该功能的解决方案req()(请参阅此处)。然而,后者在第一次尝试时并没有完全解决问题,前者需要更多的工作,因为我必须在每个情节中添加 if 子句。

现在,我认为我实际上可以接受错误消息,因为此后该图显示得相当快。但是,有没有机会改变颜色。如果这是灰色和深蓝色,它会更不引人注目。

css r shiny

2
推荐指数
1
解决办法
951
查看次数

标签 统计

r ×8

data.table ×2

shiny ×2

css ×1

parallel-processing ×1

reshape ×1