小编SFu*_*n28的帖子

R - 我应该在哪里放置RDA文件 - /R,/ data,/ inst/extdata?

据"写作R附加"手册中,有三个目录,其中RDA文件可以放在:/R,/data,/inst/extdata

很难从手册中解读最佳实践.有人可以评论何时/为何将RDA文件放在这三个目录中的每一个中.

以下是我正在解决的具体案例:
我有1个RDA文件,将用于函数示例以及我的test_that测试(所有这些都存在于inst/tests中)

packages r

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

parent.env(x)混乱

我已经阅读了parent.env()的文档,看起来相当简单 - 它返回了封闭的环境.但是,如果我使用parent.env()来处理封闭环境链,我会看到一些我无法解释的东西.首先,代码(摘自"R简而言之")

library( PerformanceAnalytics )
x = environment(chart.RelativePerformance)
while (environmentName(x) != environmentName(emptyenv())) 
{ 
    print(environmentName(parent.env(x)))
    x <- parent.env(x)
}
Run Code Online (Sandbox Code Playgroud)

结果如下:

[1] "imports:PerformanceAnalytics"
[1] "base"
[1] "R_GlobalEnv"
[1] "package:PerformanceAnalytics"
[1] "package:xts"
[1] "package:zoo"
[1] "tools:rstudio"
[1] "package:stats"
[1] "package:graphics"
[1] "package:utils"
[1] "package:datasets"
[1] "package:grDevices"
[1] "package:roxygen2"
[1] "package:digest"
[1] "package:methods"
[1] "Autoloads"
[1] "base"
[1] "R_EmptyEnv"
Run Code Online (Sandbox Code Playgroud)

我们如何解释顶部的"基础"和底部的"基础"?另外,我们如何解释"package:PerformanceAnalytics"和"imports:PerformanceAnalytics"?没有前两行,一切看起来都是一致的.也就是说,函数chart.RelativePerformance在包中:PerformanceAnalytics环境由xts创建,它由zoo创建,......一直向上(或向下)到base和空环境.

此外,文档对此并不十分清楚 - "封闭环境"是创建另一个环境的环境,因此行走的parent.env()显示了"创建"链?

编辑

无耻的插件:我写了一篇博文,用直观的图解释环境,parent.env(),附件,命名空间/包等.

r

10
推荐指数
2
解决办法
381
查看次数

将值移动到其他环境

假设我的内存值很大(可能是一个巨大的矩阵).有没有办法将该值移动到不同的环境而不是复制然后删除?复制/克隆方法会临时增加内存占用量的大小.

我查看了这篇文章,但它不包含我的问题的解决方案.共享相同的环境(避免复制)不是一种选择.我确实需要移动价值.

memory r environments

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

"反序列化错误" - 带SOCK的foreach/doSNOW/snow(windows)

我正在使用SOCK集群和本地计算机上的工作程序运行并行操作.如果我限制我正在迭代的集合(在一次测试中使用70而不是完整的135个任务)那么一切正常.如果我去全套,我得到错误"反序列化错误(socklist [[n]]):从连接读取错误".

  • 我已取消阻止Windows防火墙中的端口(进/出)并允许Rscript/R的所有访问.

  • 它不能是超时问题,因为套接字超时设置为365天.

  • 它不是任何特定任务的问题,因为我可以顺序运行(如果我将数据集分成两半并进行两次单独的并行运行,也可以并行运行)

  • 我能想到的最好的是,通过套接字传输的数据太多了.似乎没有一个集群选项来限制数据限制.

我对如何进行感到茫然.有没有人见过这个问题或者可以建议修复?

这是我用来设置集群的代码:

cluster = makeCluster( degreeOfParallelism , type = "SOCK" , outfile = "" )
registerDoSNOW( cluster )
Run Code Online (Sandbox Code Playgroud)

编辑
虽然此问题与整个数据集有关,但它也会随着时间的推移而减少数据集.这可能表明这不仅仅是数据限制问题.

编辑2
我挖得更深一些,事实证明我的函数实际上有一个随机组件,这使得有时任务会引发错误.如果我按顺序运行任务,那么在操作结束时,我被告知哪个任务失败了.如果我并行运行,那么我会收到"unserialize"错误.我尝试在tryCatch调用中使用error = function(e){stop(e)}包装由每个任务执行的代码,但这也会生成"unserialize"错误.我很困惑因为我认为雪会把它们传回主人来处理错误?

parallel-processing foreach r

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

foreach%dopar%使用PSock群集的顺序工作者设置?

我注意到foreach /%dopar%在并行执行任务之前执行集群的顺序而非并行设置.如果每个工人需要一个数据集,它需要N秒到数据集传送到工人,然后的foreach /%dopar%花费#workers * N seconds设置时间.这对于大量工作人员或大型N(要传输的大型数据集)非常重要.

我的问题是这是设计还是存在一些我在foreach中或者在集群生成中缺少的参数/设置?

建立

  • R 2.15.2
  • 最新版本的foreach/parallel/doParallel截至今日(2013年7月1日)
  • Windows 7 x64

library( foreach )
library( parallel )
library( doParallel )

# lots of data
data = eval( rnorm( 100000000 ) )

# make cluster/register - creates 6 nodes fairly quickly
cluster = makePSOCKcluster( 6 , outfile = "" )
registerDoParallel( cluster  )

# fire up Task Manager.  Observer that each node recieves data sequentially.
# When last …
Run Code Online (Sandbox Code Playgroud)

r

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

JSON.net不应该使用构造函数参数的默认值,应该使用默认属性

有没有办法告诉JSON.net当它尝试使用构造函数反序列化时(如果没有默认构造函数),它不应该为构造函数参数赋值默认值,并且它应该只调用构造函数,如果每个构造函数参数是用JSON字符串表示?同一个序列化程序在调用属性/字段设置器时应该使用默认值,规则只限于构造函数.这里的枚举值似乎都不合适:http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_DefaultValueHandling.htm

解决方案不应该依赖于对要反序列化的类型应用任何属性.

例如,通过将Dog的age设置为0(int的默认值),json字符串"{}"将反序列化为类型的对象Dog.我想要一个通用的,不基于属性的解决方案来防止这种情况发生.在这种情况下,{"age":4}将工作因为age在JSON字符串中指定并对应于构造函数参数.

public class Dog
{
    public Dog(int age)
    {
        this.Age = age;
    }

    public int Age { get; }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果Dog指定为这样,那么"{}" 应该反序列化为具有Age == 0的Dog,因为Dog不是使用构造函数创建的.

public class Dog
{   
    public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并且要避免任何关于"你为什么要这样做"的问题......带有构造函数的对象通常在质量上与POCO不同,因为它与它们的属性有关.使用构造函数在POCO上存储属性值而不是可设置属性通常意味着您要验证/约束属性值.因此,在存在constuctor的情况下不允许使用默认值进行反序列化是合理的.

.net c# json.net

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

如何为整个类禁用特定的代码分析警告

我试图在整个类中禁用代码分析规则,但不是整个项目,只是一个类.在下面的示例中,构建生成CA1822警告,因为它认为单元测试方法应该是静态的.

修复是将以下属性添加到每个单元测试方法: [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic")]

然而,这很繁琐,并且混乱了许多单元测试.

我试过了:

  1. 将属性移动到类
  2. 包装所有方法

#pragma warning disable CA1822

#pragma warning restore CA1822

这两种方法都没有奏效.

public class TestClass
{
    public TestClass()
    {
        // some setup here
    }

    [Fact]
    public void My_Unit_Test1()
    {
        // the 'this' parameter is never used, causes CA warning 1822
    }

    [Fact]
    public void My_Unit_Test2()
    {
        // the 'this' parameter is never used, causes CA warning 1822
    }
}
Run Code Online (Sandbox Code Playgroud)

使用VS2015 Update 2,.net 4.61和新的代码分析分析器.

.net c# code-analysis visual-studio-2015 .net-4.6

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

SemaphoreSlim.Wait(CancellationToken)正确尝试/最终为OperationCancelledException?

当使用带有取消令牌的SemaphorSlim时,我应该如何构造try/finally,以便正确处理OperationCancelledException?在选项A中,取消令牌源会抛出OperationCancelledException但不会调用Release().在选项B中,取消令牌源会抛出OperationCancelledException,并且DOES会调用Release().

// option A:
_semaphorSlim.Wait( _cancellationTokenSource.Token );
try
{
     // do work here
}
finally
{
     _semaphorSlim.Release();
}


// option B:
try
{
     _semaphorSlim.Wait( _cancellationTokenSource.Token );
     // do work here
}
finally
{
     _semaphorSlim.Release();
}
Run Code Online (Sandbox Code Playgroud)

.net multithreading semaphore .net-4.0

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

我应该处置重定向的StandardOutput/StandardError

如果我重定向StandardOutput/ StandardError在创建Process对象时,我应该StreamReaders在不再需要Process对象时处置它吗?使用反射器我看到Process.Dispose()这对我没有这样做(除非我遗漏了什么).

.net process

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

CreateMany与种子有什么关系?

参数的CreateMany重载T seed实际上做了什么?我试图播种,但种子似乎对创建的对象没有影响.例如,我期待如果我的种子具有类型的属性string,那么:

  • 字符串值将用于在所有新创建的对象中填充该属性

  • 或者在所有新创建的对象中设置该属性时,字符串值将用作前缀

c# unit-testing autofixture

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