小编Dar*_*ook的帖子

什么时候选择nls()而不是黄土()?

如果我有一些(x,y)数据,我可以很容易地直线绘制,例如

f=glm(y~x)
plot(x,y)
lines(x,f$fitted.values)
Run Code Online (Sandbox Code Playgroud)

但对于弯曲的数据,我想要一条曲线.似乎可以使用loess():

f=loess(y~x)
plot(x,y)
lines(x,f$fitted)
Run Code Online (Sandbox Code Playgroud)

这个问题随着我输入和研究而得到了发展.我开始想要一个简单的函数来适应弯曲的数据(我对数据一无所知),并想要了解如何使用nls()optim()做到这一点.这就是每个人似乎在我发现的类似问题中提出的建议.但现在我偶然发现loess()我很高兴.所以,现在我的问题是为什么有人会选择使用nlsoptim代替loess(或smooth.spline)?使用工具箱类比,是nls一把螺丝刀,loess是一个电动螺丝刀(意思是我几乎总是选择后者,因为它做同样的事情,但我的努力更少)?或者是nls平头螺丝刀和loess十字螺丝刀(意味着黄土更适合某些问题,但对于其他人来说它根本不能完成这项工作)?

作为参考,这里是我正在使用的播放数据,它loess给出了令人满意的结果:

x=1:40
y=(sin(x/5)*3)+runif(x)
Run Code Online (Sandbox Code Playgroud)

和:

x=1:40
y=exp(jitter(x,factor=30)^0.5)
Run Code Online (Sandbox Code Playgroud)

可悲的是,它在这方面做得不太好:

x=1:400
y=(sin(x/20)*3)+runif(x)
Run Code Online (Sandbox Code Playgroud)

nls()或任何其他函数或库,可以处理这个和前面的exp示例,而不给出提示(即没有被告知它是正弦波)?

更新:stackoverflow上相同主题的一些有用页面:

R中的拟合优度函数

如何在R中为我的数据拟合平滑曲线?

smooth.spline"开箱即用"在我的第一和第三个例子上给出了很好的结果,但在第二个例子中可怕(它只是加入了点).然而,f = smooth.spline(x,y,spar = 0.5)在所有三个上都是好的.

更新#2:gam()(来自mgcv包)到目前为止很棒:当它更好时它会给loess()一个类似的结果,而当它更好时它会给smooth.spline()一个类似的结果.并且没有提示或额外参数.到目前为止,文件已经超出了我的脑海,我觉得我正眯着眼睛望着飞过头顶的飞机; 但发现了一些试验和错误:

#f=gam(y~x)    #Works just like glm(). I.e. pointless
f=gam(y~s(x)) #This is what you want
plot(x,y)
lines(x,f$fitted)
Run Code Online (Sandbox Code Playgroud)

r curve-fitting

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

访问R中的所有函数参数

我有一个函数f(),它有一些命名参数.它调用函数g(),我想将所有f的参数传递给它.这可能吗?

使用...只是涵盖了额外的参数:

f=function(a,callback,b,c,d,...){
  z=a-b
  callback(z,...) 
  }

g=function(z,...){
  print(list(...))    #Only shows $e
  print(z)    #-1
  print(a,b,c,d)  #'a' not found   
}

f(1,g,2,3,d=4,e=5);
Run Code Online (Sandbox Code Playgroud)

我认为formals()就是答案,但它似乎只是参数名称,而不是它们的价值!

f=function(a,callback,b,c,d,...){
  z=a-b
  callback(z,formals()) 
  }

g=function(z,...){
  args=list(...)[[1]]
  print(args$a) #(no output)
  print(class(args$a))  #"name"
}

f(1,g,2,3,d=4,e=5);
Run Code Online (Sandbox Code Playgroud)

可能吗?谢谢.

r

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

SSE(EventSource):为什么不超过6个连接?

在重载我的机器之前,我想看看我可以设置多少同步SSE(也称为EventSource)连接.但是使用Firefox(Firefox 18或Firefox 20)测试它在6个连接处停止:附加连接没有错误,但不发送任何数据.(在Firebug中,我可以在那里看到它们,等待连接.)Chromium 25也在6个连接处停止,Opera 12.15也是如此.但它似乎不是服务器端限制(我使用Apache + PHP),因为我可以同时运行所有三个浏览器(即18个连接),并且所有都来自相同的IP地址.(服务器和客户端位于同一台计算机上,但使用的是172.16.xx地址,而不是127.0.0.1.)

所以,我用CORS设置测试,并尝试连接到另一台具有全局IP的服务器.这次我获得了12个Firefox连接.建议它毕竟是Apache配置?不,Opera仍然只有6个连接.(Chrome没有号码,因为CORS似乎不起作用.)我也可以连接两台服务器,在Firefox中共有18个连接(但从不再连接),在Opera中共有12个连接.

作为第三个测试,我将后端和html移动到远程服务器,并以这种方式加载页面.这次我达到了Firefox的10个连接限制!?!Opera仍然有6的限制.而Chromium(由于这次没有涉及CORS,因此有效)限制为6.

我很欣赏任何关于这个数字6来自哪里的见解,以及所有三个浏览器是否相同的巧合.特别是任何洞察Firefox为何有时为6,有时为10,有时为12.(SSE规范似乎未定义最大连接数.)


Apache配置是使用prefork,这意味着这些设置:

StartServers          5
MinSpareServers       5
MaxSpareServers      10
MaxClients          150
MaxRequestsPerChild   0
Run Code Online (Sandbox Code Playgroud)

(本地(Ubuntu 10.04)和全局(Ubuntu 11.10)服务器在这里具有相同的Apache设置.)我认为关键数字是MaxClients是150.我做了一个快速实验,将StartServers更改为50而不是5,但是相同结果.


这是客户端HTML/javascript(1或2行取消注释,如果你想实验连接到不同的服务器那么修改;如这里给出的,它希望在与HTML相同的目录中找到sse.php):

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>SSE Stresstest</title>
</head>
<body>
<p id="err"></p>
<p id="x"></p>
<script>
function start(){

function onMessage(e){
document.getElementById('x').innerHTML+=e.origin+":"+this.dummy_n+":"+e.data+"<br/>";
};

function onError(e){
document.getElementById('err').innerHTML+="ERR:"+this.dummy_n+":"+JSON.stringify(e)+"<br/>";
};

for(var n=1;n<=32;++n){
    //NB. 't' primarily to avoid caching
    var url='sse.php?dummy_n='+n+'&t='+(new Date().getTime());
    //if(n%2==0)
    //    url='http://example.com/sse.php?dummy_n='+n+'&t='+(new Date().getTime());
    var es=new EventSource(url);
    es.dummy_n=n;   //So we can identify each one
    es.addEventListener('error',onError,false);
    es.addEventListener('message',onMessage,false); …
Run Code Online (Sandbox Code Playgroud)

apache firefox opera google-chrome server-sent-events

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

R:从h2o.randomForest()和h2o.gbm()绘制树

寻找一种有效的方法在rstudio,H2O的Flow或h2o的RF和GBM模型的本地html页面中绘制树,类似于下面链接中的图像.具体来说,如何通过解析h2o.download_pojo(rf1)或h2o.download_pojo(gbm1)来为下面的代码生成的对象(拟合模型)rf1和gbm2绘制树?

http://i.stack.imgur.com/3OWx1.png

# # The following two commands remove any previously installed H2O packages for R.
# if ("package:h2o" %in% search()) { detach("package:h2o", unload=TRUE) }
# if ("h2o" %in% rownames(installed.packages())) { remove.packages("h2o") }

# # Next, we download packages that H2O depends on.
# pkgs <- c("methods","statmod","stats","graphics","RCurl","jsonlite","tools","utils")
# for (pkg in pkgs) {
#   if (! (pkg %in% rownames(installed.packages()))) { install.packages(pkg) }
# }
# 
# # Now we download, install h2o package
# install.packages("h2o", type="source", repos=(c("http://h2o-release.s3.amazonaws.com/h2o/rel-turchin/3/R")))
library(h2o)

h2o.init(nthreads = …
Run Code Online (Sandbox Code Playgroud)

r data-visualization random-forest gbm h2o

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

如何使用Rcpp和内联设置g ++编译器标志?

我想设置-std=c++0x,使用内联Rcpp.

在使用内联包时看到了R:C++ Optimization标志但不想进行系统范围的更改,所以我在Dirk的回答中尝试了选项2.

我试过了:

settings=getPlugin("Rcpp")
settings$Makevars[length(settings$Makevars)+1] = "CXXFLAGS = $(CXXFLAGS) -std=c++0x"
fun=cxxfunction(signature(x_ ="numeric"),src,plugin="Rcpp",settings=settings,verbose=2);
Run Code Online (Sandbox Code Playgroud)

但是详细的输出表明它忽略了这一点.我也试过CFLAGS,并没有包含现有价值,但没有效果.

c++ r inline rcpp

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

Netbeans找不到我的所有include_once路径

我刚刚将一个较大的php项目导入NetBeans.在顶级目录下,我有"app1","app2","app3"等(每个都映射到一个域名),然后是一个"共享"目录,用于(你猜对了)所有应用程序使用的文件.

在app1/route/Search.inc中它有:

include_once "../shared/lib/search.inc";
Run Code Online (Sandbox Code Playgroud)

但是这行上的ctrl-B什么也没做.有道理,从NetBeans的角度来看,作为一个大型应用程序,它应该是"../../shared/lib/search.inc".但是,对于应用程序的配置方式,上述内容是正确的,NetBeans是错误的.

我如何告诉NetBeans需要多出一个目录?

在Include Path下,我尝试添加"/ full/path/to/app1"(这样就可以找到"../shared/lib/")(我尝试了Private选项卡,然后是Shared选项卡,结果相同.)但是它拒绝,告诉我app1目录已经是应用程序的一部分.没有"做我说的话,不要考虑它,打耳光!" 按钮.

在文件系统中添加符号链接,仅适用于NetBeans,感觉有点难看.

我想知道我是否应该为每个应用程序制作一个NetBeans项目?(我实际上是先尝试过,但由于所有应用程序都在同一个git存储库中,它会产生很多噪音,所以我认为这是错误的方法.)

附加:我最感兴趣的是我的上一个问题的答案 - 将每个应用程序保持为单独的NetBeans项目是标准做法,即使它们都在同一个git存储库中吗?

Product Version: NetBeans IDE 8.0.2 (Build 201411181905)
Updates: NetBeans IDE is updated to version NetBeans 8.0.2 Patch 1
Java: 1.7.0_79; OpenJDK 64-Bit Server VM 24.79-b02
Runtime: OpenJDK Runtime Environment 1.7.0_79-b14
(on linux Mint 17)
Run Code Online (Sandbox Code Playgroud)

php netbeans php-include

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

是否有R当量的strtotime

PHP有这个很棒的功能,strtotime它接受包含任何日期格式的任何字符串并返回一个时间(自1970年以来的秒数).strptime例如,它更具有前瞻性,因为如果日期格式发生变化,我的脚本就不会中断.R有类似的东西吗?

(我今天不需要strtotime的时间相关功能,但我确定在某些时候我需要strtotime("next Thursday"),或者strtotime("first day of last month"),如果你知道R扩展也这样做,那么我很乐意听到关于它!)

更新:如果有人(可能在将来的某个时候)想要尝试用R或任何其他语言实现它,我会查找它的源代码.相关文件是timelib.h,timelib.re和timelib_structs.h.它似乎都是标准的C和独立的,没有PHP头文件.但是编译过程将*.re文件编译成真正的C,所以你需要安装和编译PHP至少一次.

调用它代码也非常简单(在编写本文时,请参阅第1428行至第1433行;同一函数中位于其上方的较长代码仅用于获取当前时间,以便在相对时间内使用).

php r date strtotime

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

Selenium2 firefox:使用默认配置文件

默认情况下,Selenium2以新的配置文件启动firefox.我喜欢这个默认设置,但出于某些原因(访问我的书签,保存密码,使用我的附加组件等)我想从我的默认配置文件开始.

还有就是应该是一个属性控制这一点,但我认为文档是与源同步的,因为据我可以告诉大家webdriver.firefox.bin的是,唯一可行的.例如,开始使用硒:

java -jar selenium-server-standalone-2.5.0.jar -Dwebdriver.firefox.bin=not-there
Run Code Online (Sandbox Code Playgroud)

工作(即抱怨).但这没有效果:

java -jar selenium-server-standalone-2.5.0.jar -Dwebdriver.firefox.profile=default
Run Code Online (Sandbox Code Playgroud)

("default"是profiles.ini中的名称,但我也尝试使用"Profile0",这是profiles.ini中该部分的名称).

我正在使用PHPWebdriver(使用JsonWireProtocol)来访问:

$webdriver = new WebDriver("localhost", "4444");

$webdriver->connect("firefox");
Run Code Online (Sandbox Code Playgroud)

我尝试从PHP端做到这一点:

$webdriver->connect("firefox","",array('profile'=>'default') );
Run Code Online (Sandbox Code Playgroud)

要么:

$webdriver->connect("firefox","",array('profile'=>'Profile0') );
Run Code Online (Sandbox Code Playgroud)

没有成功(firefox启动,但没有使用我的个人资料).

我还尝试了黑客创建批处理文件的方法:

#!/bin/bash
/usr/bin/firefox -P default
Run Code Online (Sandbox Code Playgroud)

然后启动Selenium:java -jar selenium-server-standalone-2.5.0.jar -Dwebdriver.firefox.bin ="/ usr/local/src/selenium/myfirefox"

Firefox启动,但没有使用默认配置文件,更糟糕的是,一切都挂起:selenium似乎无法与firefox通信这种方式启动时.

PS我看到Selenium - 自定义Firefox配置文件 我试过这个:

java -jar selenium-server-standalone-2.5.0.jar -firefoxProfileTemplate "not-there"
Run Code Online (Sandbox Code Playgroud)

它拒绝运行!兴奋,以为我可能会有所作为,我试过:

java -jar selenium-server-standalone-2.5.0.jar -firefoxProfileTemplate /path/to/0abczyxw.default/
Run Code Online (Sandbox Code Playgroud)

这什么都不做.即它仍然以新的配置文件开头:-(

php firefox webdriver selenium-webdriver

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

为什么RUnit会改变我的随机数?

在单元测试中,我启动一个辅助函数(生成测试数据):

set.seed(1)
Run Code Online (Sandbox Code Playgroud)

我正在以交互方式开发单元测试,如下所示:

source('tests/runit.functions.R');test.something()
Run Code Online (Sandbox Code Playgroud)

但是当我从我的测试中运行时,run_tests.R他们失败了.尽管有set.seed(1)命令,我把它缩小到不同的随机数!我在set.seed(1)之后添加了这一行:

print(sessionInfo());print("RANDOM SEED:");print(.Random.seed)
Run Code Online (Sandbox Code Playgroud)

真正有趣的部分是随机种子完全不同.在批处理脚本中,它只有三个数字:

501 1280795612 -169270483
Run Code Online (Sandbox Code Playgroud)

在我的交互式R会话中,它是一个626元素的怪物:

[1]         403         624  -169270483  -442010614 ...
 ...
[617]   197184543    -2095148  ... -689249108
Run Code Online (Sandbox Code Playgroud)

第一个数字,501与403,显然是随机数生成器的类型,但我无法追踪主列表中数字的含义.

我认为我的问题的核心是确保我的单元测试具有可靠的随机数生成的最佳方法是什么?第二个问题是故障排除建议:如何跟踪正在使用哪个随机数生成器(更重要的是)哪个代码/包/设置决定使用它?

sessionInfo不看非常有帮助的,但它显示出一些小的差异.例如,包含TTR包是由于正在运行其他单元测试.这是sessionInfo批处理脚本的输出,第一行是#!/usr/bin/Rscript --slave:

R version 2.15.1 (2012-06-22)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.utf8       LC_NUMERIC=C              LC_TIME=en_US.utf8        LC_COLLATE=en_US.utf8     LC_MONETARY=en_US.utf8    LC_MESSAGES=en_US.utf8   
 [7] LC_PAPER=C                LC_NAME=C                 LC_ADDRESS=C              LC_TELEPHONE=C            LC_MEASUREMENT=en_US.utf8 LC_IDENTIFICATION=C      

attached base packages:
[1] methods   stats     graphics  grDevices utils     datasets  base     

other attached packages:
[1] TTR_0.21-1   xts_0.8-6    zoo_1.7-7    RUnit_0.4.26

loaded …
Run Code Online (Sandbox Code Playgroud)

random r runit

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

如何安装PHP PhantomJS需要包

我正在尝试使用PHP PhantomJS,但它需要一些程序包才能运行..我是php的作曲家,当我试图在root PHP PhantomJS上安装依赖项时

composer install
Run Code Online (Sandbox Code Playgroud)

Loading composer repositories with package information
Installing dependencies (including require-dev)
Nothing to install or update
Generating autoload files
Run Code Online (Sandbox Code Playgroud)

我很困惑...任何人都可以帮助如何安装运行PHP PhantomJS脚本的软件包?

php phpunit phantomjs composer-php

8
推荐指数
2
解决办法
3867
查看次数