小编rlh*_*lh2的帖子

从自定义目录加载R包

如果我从CRAN网站下载"package-name".tar.gz文件,gunzip并将其解压缩到自定义目录中,如何从R中加载该包?我无法在R安装目录中解压缩该文件.

installation r package

24
推荐指数
3
解决办法
5万
查看次数

连接到MS SQL Server时出现RODBC临时表问题

我在unix上运行R,我使用RODBC包连接到MS SQL服务器.我可以执行一个使用包返回结果的查询,但如果我在SQL查询的某处使用临时表,则返回一个空字符串给我.在浏览网页后,我认为问题可能是RODBC软件包是在最终用户使用标准SQL(而不是MS SQL)编写的时候编写的.我提供了以下代码作为示例.

有趣的是,如果我使用RJDBC包,则不存在临时表问题.但是,RJDBC软件包输入甚至80,000行(10列)的速度非常慢,并且会经常停顿,所以这也不是一个选择.有没有其他人遇到这个问题?如果有其他解决方案我没有想到,我很乐意听到它们.

看来我不是唯一有这个问题的人,也许这是一个R-Bug? http://r.789695.n4.nabble.com/RODBC-results-from-stored-procedure-td897462.html

谢谢

这是R的例子:

library(RODBC)
ch <- odbcConnect(insert your server info here)
qry4 <- "create table #tempTable(
    Test int
)
insert into #tempTable
select 2

select * from #tempTable
drop table #tempTable
"
df4 <- sqlQuery(ch, qry4)
Run Code Online (Sandbox Code Playgroud)

sql sql-server r rodbc

19
推荐指数
2
解决办法
7323
查看次数

处理data.table中的闭包

我正在使用data.table包来返回j表达式中的函数闭包列表,作为approxfunstats包中函数的输出.基本上,在每个Date上,我想要一个闭包,它允许我根据确定的任意xval计算任意yval approxfun.

但是,approxfun仅当传递给函数的x的至少两个唯一值时才有效.在只有一个x的唯一值的情况下,我想返回一个返回y的唯一值的函数.

在下面的代码,我执行该步骤通过检查.N值并返回取决于是否不同的功能.N就是> 1.

 library(data.table)
 set.seed(10)
 N <- 3
 x <- data.table(Date = Sys.Date() + rep(1:N, each = 3), xval = c(0, 30, 90), yval = rnorm(N * 3))
 x <- x[-c(2:3), ]

 ##interpolation happens correctly
 x2 <- x[order(Date, xval), {
     if(.N > 1){
         afun <- approxfun(xval, yval, rule = 1)
     }else{
         afun <- function(v) yval
     }
     print(afun(30))
     list(Date, afun = list(afun))
 }, by = Date] …
Run Code Online (Sandbox Code Playgroud)

closures r data.table

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

在R 3.4.3和R 3.6.0之间更改data.table中存储的闭包的行为

从R 3.4.3升级到R 3.6.0时,我注意到以下特殊行为(两者都使用data.table 1.12.6)。在3.4.3中,以下代码导致all.equal语句为TRUE,但在3.6.0中,存在一个相对平均差,这是因为即使我们试图访问从“ a”组计算出的近似值,使用“ b”组中的值(可能是由于延迟评估而造成的)。在3.6.0中,可以基于以下问题在对roxofun的调用中添加一个copy语句来解决此问题: data.table中闭包的处理

对我而言,令人着迷的是我在3.4.3中没有得到错误。知道发生了什么变化吗?

library(data.table)
data <- data.table(
  group = c(rep("a", 4), rep("b", 4)),
  x = rep(c(.02, .04, .12, .21), 2),
  y = c(
    0.0122, 0.01231, 0.01325, 0.01374, 0.01218, 0.01229, 0.0133, 0.01379)
)

dtFuncs <- data[ , list(
  func = list(stats::approxfun(x, y, rule = 2))
), by = group]

f <- function(group, x) {
  dtResults <- CJ(group = group, x = x)
  dtResults <- dtResults[ , {
   .g <- group
    f2 <- dtFuncs[group == …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

令人惊讶的是,R的标准偏差很慢

我正在计算扩展窗口上的标准偏差,在每个点我重新计算标准偏差.这似乎是一个相当简单的事情,应该相对较快.但是,它需要比你想象的要长很多(约45秒).我在这里错过了什么吗?在Matlab中,这非常快.

t0 <- proc.time()[[3]]
z <- rep(0, 7000)
x <- rnorm(8000)
for(i in 1000:8000){
##    print(i)
    z[i] <- sd(x[1:i])
}
print(proc.time()[[3]]- t0)
Run Code Online (Sandbox Code Playgroud)

r

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

在Linux上安装RQuantLib

我们一直在尝试在redhat linux机器上安装RQuantLib.经过一个月(令人尴尬的长时间!)的反复试验,我们成功地编译了最新版本的boost和quantlib.我根本不是Linux专家,因此在运行install.packages("RQuantLib")时调试编译标志时遇到一些麻烦.Rcpp已经安装并且工作正常.

以下错误消息详细说明了该问题.我很困惑,因为我认为它应该需要的文件(libQuantLib.so.0)存在于/ usr/local/lib中.很抱歉,这很可能是一个愚蠢的问题,但我认为我们非常接近在Linux上访问R中的quantlib.

错误消息如下:

g++ -I/apps/R/R-3.0.0/include -DNDEBUG  -I/usr/local/include -I"/apps/R/R-3.0.0/library/Rcpp/include"  -g -O2  -I/usr/local/include -I/usr/loca
l/include/boost  -I. -fpic  -g -O2  -c zero.cpp -o zero.o

g++ -shared -L/usr/local/lib64 -o RQuantLib.so asian.o barrier_binary.o bermudan.o bonds.o calendars.o curves.o daycounter.o discount.o hullwhi
te.o implieds.o utils.o vanilla.o zero.o -L/apps/R/R-3.0.0/library/Rcpp/lib -lRcpp -Wl,-rpath,/apps/R/R-3.0.0/library/Rcpp/lib -L/usr/local/lib
-L/usr/local/lib -lQuantLib

installing to /apps/R/R-3.0.0/library/RQuantLib/libs
** R
** demo
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be …
Run Code Online (Sandbox Code Playgroud)

r quantlib

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

C 中可变长度数组的动态内存分配

什么时候用 calloc 实例化可变长度数组比用 C 中的“普通”数组声明更好?

考虑“数组声明”方法:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

    int n = atoi(argv[1]);
    int x[n];

    for(int i = 1; i < n; i++){
        x[i] = i;
        printf("%i", x[i]);
        printf("\n");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

与 calloc 方法相比:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

    int n = atoi(argv[1]);
    int * x = (int*) calloc(n, sizeof(int));

    for(int i = 1; i < n; i++){
        x[i] = i;
        printf("%i", x[i]);
        printf("\n");
    }
    return …
Run Code Online (Sandbox Code Playgroud)

c variable-length-array

0
推荐指数
1
解决办法
1149
查看次数