我在R CMD INSTALL --build packageWindows电脑上运行.我的包导入了几个本身依赖于更多包的其他包.我在本地r_libs文件夹中安装了所有依赖项,一切正常.
现在有时我在不同的Windows计算机上有我的包源代码.在这台计算机上,我没有安装所有的依赖包.
当我尝试使用时R CMD INSTALL --build package,我得到了明显的" ERROR: dependencies 'package a', 'package b', etc, are not available for package".
我的问题是:我可以使用编译软件包R CMD INSTALL --build,而不依赖项检查不除去Import,并Depends在项目中的DESCRIPTION文件?
咨询后--help,我尝试了--no-test-load选项,但没有运气.
我有一个data.table,有一个平衡.余额基于每个期间的存款/取款.每个期间都有一个应该适用的利率.但是,我无法将利率与余额相结合,基本上将利率应用于余额,然后使用下一期间的更新余额来计算新值.
Balance_t1 = (0 + Deposit_t1)*(1+Interest_t1)
Balance_t2 = (Balance_t1 + Deposit_t2)*(1+Interest_t2)
Balance_t3 = (Balance_t2 + Deposit_t3)*(1+Interest_t3)
Run Code Online (Sandbox Code Playgroud)
我有以下内容 data.table
dtCash <- data.table(
Deposit = c(100, 100, -300, 0),
Balance = c(100, 200, -100, -100),
Interest=c(0.1, 0.01, 0.2, 0.1)
)
Run Code Online (Sandbox Code Playgroud)
结果将是:
dtCash <- data.table(
Deposit = c(100, 100, -300, 0),
Balance = c(100, 200, -100, -100),
Interest=c(0.1, 0.01, 0.2, 0.1),
BalanceWithInterest = c(110, 212.1, -105.48, -116.028)
)
Run Code Online (Sandbox Code Playgroud)
如何在每个时段更新和引用更新的"余额"列?
这是来自data.table简介中的示例.见 http://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.pdf
这些例子继续说二进制搜索比矢量扫描更快,并产生完全相同的结果(参见第5页).所以这是我的例子:
library(data.table)
grpsize = ceiling(10000/26^2)
DF <- data.frame(x=rep(LETTERS,each=26*grpsize), y=rep(letters,each=grpsize),v=runif(grpsize*26^2), stringsAsFactors=FALSE)
DT = data.table(DF)
setkey(DT,x,y)
DT[x=='R' & y=='h']
DT[J("R","h")]
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,返回完全相同的结果.一个扫描每一行,另一个是二分搜索.但是,当存在不存在的行时,结果会有所不同.请参阅以下代码:
DT[x=='R' & y=='H']
DT[J("R","H")]
Run Code Online (Sandbox Code Playgroud)
我得到以下结果
# > DT[x=='R' & y=='H', ]
# Empty data.table (0 rows) of 3 cols: x,y,v
# > DT[J("R","H")]
# x y v
# 1: R H NA
Run Code Online (Sandbox Code Playgroud)
a.)为什么会这样?
b.)是否有办法将二进制搜索的行为更改为不返回非现有行的结果?
我正在尝试更改data.table中特定行的一列值.这在我进行矢量扫描时起作用,但在我进行二分查找时不起作用.
dtData <- data.table(TickerId = c(1,2,3,4,5), DateTime = c(1,2,3,4,5), Close = c(100,200,300,400,500), key=c('TickerId', 'DateTime'))
dtQuery <- data.table(TickerId = c(1,4), DateTime = c(1,4))
#Binary search doesn't work - both changed rows now contain 101
dtData[dtQuery, Close:=c(101,401)]
#Vector scan works
dtData[TickerId %in% c(1,4) & DateTime %in% c(1,4), Close:=c(101,401)]
Run Code Online (Sandbox Code Playgroud)
有人能指出为什么会出现这种情况吗?
还有什么是在大型data.table中更改这样的值的最佳(最快)方法?
谢谢.
我试图计算一个r在T日期范围内的回报时间序列的滚动总和.但是,在我计算滚动总和的每个日期时,我想要计算滚动总和w中每个数字的权重.
该公式适用于每个日期t:
[Sum from i=1 to m](w(i)*r(t-i-1))
Run Code Online (Sandbox Code Playgroud)
让我们看一个非常简单的例子.我有一个T = 6返回的返回系列r.对于每个日期,t我想计算过去两个日期(m = 2)的滚动总和.我还想把第一次观察的重量增加到第二次.
r <- c(100,110,100,110,100,110)
w <- c(1,0.5)
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用过滤功能轻松完成滚动总和:
filter(r, rep(1, 2))
Run Code Online (Sandbox Code Playgroud)
但是我无法将权重因子包含在滚动总和中.以下行给出了错误的结果c(155, 155, 155, 155, 155, NA)
filter(r*w, rep(1, 2))
Run Code Online (Sandbox Code Playgroud)
在哪里我真的想得到结果 c(155, 160, 155, 160, 155, NA)
任何帮助表示赞赏.
我有一个 data.table 对象,其中日期和时间列存储为 IDate/ITime 对象。我还有一个时区列,其中时区以字符形式给出。
现在我想创建一个使用 POSIXct 格式的 DateTime 列。但是我不知道如何向对象添加正确的时区。
#Create the data.table object
dtData <- data.table(
Index = seq(1,5),
Time= as.ITime(c('16:00', '16:00', '12:30', '16:00', '15:00')),
Date = as.IDate(rep('2015-05-28', 5)),
TimeZone=c('America/New_York', 'America/New_York', 'Europe/London', 'Asia/Hong_Kong', 'Japan'))
#This gives an error of invalid tz value
dtData[, psxDateTime:=as.POSIXct(Date, time = Time, tz = TimeZone)]
#This seem to set every row to Japan time zone
dtData[, psxDateTime:=as.POSIXct(Date, time = Time, tz = TimeZone), by=Index]
print(dtData$psxDateTime)
Run Code Online (Sandbox Code Playgroud)
有人能指出我正确的方向吗?谢谢。
编辑:
阅读 David Arenburg 和 akrun 的评论后,似乎无法在一个 data.table …
出于好奇,我如何直接调用R中的'[.class'函数?
我知道我能做到:
test <- c(2,4,6)
test[2]
Run Code Online (Sandbox Code Playgroud)
但是可以直接指定类吗?如果是这样,怎么样?
'[.numeric<-'(test , 2)
'[.numeric'(test , 2)
Run Code Online (Sandbox Code Playgroud)
我试过这些,但他们回来了
Error: could not find function "[.numeric"
Run Code Online (Sandbox Code Playgroud)