小编Jac*_*sey的帖子

捕获错误然后分支逻辑

如果出现错误情况,如何编写允许我在代码中执行不同路径的R代码?我正在使用一个往往会抛出错误的函数.当它遇到错误条件时,我想执行一个不同的功能.这是一个具体的例子:

require(SuppDists)
parms <- structure(list(gamma = -0.841109044800762, delta = 0.768672140584442, 
    xi = -0.359199299528801, lambda = 0.522761187947026, type = "SB"), .Names = c("gamma", 
"delta", "xi", "lambda", "type"))
pJohnson(.18, parms)
Run Code Online (Sandbox Code Playgroud)

pJohnson函数应该失败并出现以下错误:

 Error in pJohnson(0.18, parms) :
 Sb values out of range.
Run Code Online (Sandbox Code Playgroud)

我可以使用以下命令使错误变为静默:

try( pJohnson(.18, parms), silent=T)
Run Code Online (Sandbox Code Playgroud)

但我真正想要做的是执行的功能alternativeFunction(),如果pJohnson(.18, parms)返回错误.

似乎该withCallingHandlers()函数应该帮助我,但我无法弄清楚如何捕获错误并使其alternativeFunction()在错误条件下运行.

error-handling r

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

大写的第一个字母

是否还有其他版本可以为每个字符串设置首字母,而且对于flac perl也是FALSE?

name<-"hallo"
gsub("(^[[:alpha:]])", "\\U\\1", name, perl=TRUE)
Run Code Online (Sandbox Code Playgroud)

string r

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

在R中自动读取zip文件

我需要自动化R来读取一个zip文件中的csv数据文件.

例如,我会输入:

read.zip(file = "myfile.zip")
Run Code Online (Sandbox Code Playgroud)

在内部,将要做的是:

  • 解压缩myfile.zip到临时文件夹
  • 使用读取其中包含的唯一文件 read.csv

如果zip文件中有多个文件,则会引发错误.

我的问题是获取包含在zip文件中的文件的名称,在orded中提供它来执行read.csv命令.有谁知道怎么做?

UPDATE

这是我根据@Paul答案写的函数:

read.zip <- function(zipfile, row.names=NULL, dec=".") {
    # Create a name for the dir where we'll unzip
    zipdir <- tempfile()
    # Create the dir using that name
    dir.create(zipdir)
    # Unzip the file into the dir
    unzip(zipfile, exdir=zipdir)
    # Get the files into the dir
    files <- list.files(zipdir)
    # Throw an error if there's more than one
    if(length(files)>1) stop("More than one data file inside zip") …
Run Code Online (Sandbox Code Playgroud)

compression r

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

在包函数中访问sysdata.rda

我认为将一个包的内部数据集放入R/sysdata.rda将使我的函数可以访问数据.但我似乎无法弄清楚如何实际访问此数据帧.没有文档真正说明如何访问数据,但我的猜测是我可以简单地按名称引用数据框.但是,这似乎不起作用.

我用devtools::use_data()internal = TRUE和sysdata.rda创建.延迟加载设置为TRUE.

为了测试它,我手动加载它只是为了确保它是正确的文件.该文件被调用nhanes_files.在我的函数中,我只是引用nhanes_files对象并提取必要的数据.当我在我的包项目中测试我的功能时,它似乎工作.当我构建并加载包时,上传到GitHub,然后将包安装到一个新项目中,我收到一个错误: Error in find_data() : object 'nhanes_files' not found

我是否需要做其他事情才能使我的功能可以访问这些内部数据?

以下是最基本的功能,它不起作用:

#' Print NHANES file listing
#'
#' Provides access to the internal data listing all NHANES files
#'
#' @return A data frame with the list of files that can be accessed through the NHANES website.  Should not generally be used.  Present for debugging purposes and transparency.
#' @export
find_data <- function(){
    nhanes_files …
Run Code Online (Sandbox Code Playgroud)

r r-package

16
推荐指数
2
解决办法
3127
查看次数

测试CRAN是否正在检查包

我的包中的某些函数使用C++ 11容器运行得更快,但CRAN不接受我的包使用它们$(SHLIB_OPENMP_CXXFLAGS),$(CXX1XSTD)因为它不能在Solaris(或其他次要平台)上编译.CRAN的建议是编写一个配置脚本,但我认为这对我来说太费时间学习,并且使我的代码在很少人使用的平台上不必要地复杂化.

目前,我刚刚注释掉所有C++ 11代码,并删除了$(CXX1XSTD)来自MakevarsCRAN的提交.这是一个糟糕的工作,我宁愿能够检测CRAN Makevars并进行调整,所以我不必为每个版本维护一个CRAN fork.

我仍在测试C++ 11是否可用,但它只是Makevars中C++ 11和OpenMP标志的组合,这是带有CRAN提交的Solaris上的绊脚石.我觉得必须有一个微不足道的方法来解决这个问题.

是否有一个环境变量我应该用来测试CRAN本身是否正在检查我的包,我可以测试哪个Makevars?我已经搜索了R代码库并阅读了R Internals和Writing R Extensions,虽然我不能说我已经了解它们,这是一些CRAN维护者所期望的.CRAN 可能会设置环境变量,但我希望测试_R_CHECK_CRAN_INCOMING_=TRUE会增加维护者的愤怒.

我不认为"if solaris"测试Makevars是否足够:它是否存在C++ 11和OpenMP标志,这是不允许的,因为它们可能会在比Solaris使用更少的平台上失败.

也许我只是以错误的方式接近这个.

r cran

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

我是否在简单的OpenMP for循环中滥用了引用变量,还是一个clang bug?

我想我已经发现了一个clang ++ bug,但是我很欣赏有关我的代码是否正确的建议.Clang静态分析器认为它没问题,并且编译时没有问题,但是当使用clang 3.7进行编译时,它会使传递的参考向量的大小完全错误.GCC和clang 3.8都给出了正确的答案.我把它减少到这个测试用例:

#include <vector>
#include <iostream>
// including or excluding omp makes no difference
#include <omp.h>

void doSomething(std::vector<int> &k) {
#pragma omp for
    for (int i=0; i<2; ++i) {
            std::cout << k.size() << "\n";
    }
}

int main() {
    std::vector<int> v;
    v.push_back(1);

    std::vector<int> &j = v;
    doSomething(j);
    return(0);
}
Run Code Online (Sandbox Code Playgroud)

用libomp(我想),而不是libgomp:

clang-3.7++ -fopenmp clang-err.cpp
./a.out
18446708892352074976
18446708892352074976


clang-3.8++ -fopenmp clang-err.cpp
./a.out
1
1
Run Code Online (Sandbox Code Playgroud)

我在clang 3.7中找不到这样的bug但在3.8中修复了.我不知道如何确定我是否正在使用libomp,尽管这是LLVM/clang的编译方式.这似乎是一件简单的事情,所以我怀疑我做的事情很奇怪,而不是真正的铿锵声.

如果共识是一个铿锵的错误,我将针对3.7进行报告.谢谢.

c++ openmp clang++

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

确定所有包依赖项的最小R版本

我是一个软件包开发人员,想要说明在DESCRIPTION文件中使用我的软件包所需的最低R版本.

available.packages 解析包的描述,但结果不是(容易)机器可读的查找递归依赖,因为Imports和Depends字段是逗号分隔的文本,有时包含包有版本要求.

解决方案中描述的解决方案: 列表R包依赖性而不安装包不是递归解决方案.如果嵌套依赖关系需要R> 3.3,我想知道它.

至少,我希望看到给定CRAN包的R和导入,链接和依赖包的最低版本.更好的是列出设置最小R或包版本的包或包.

通过消除具有更高版本要求的依赖关系,我可以为更多人提供他们无法解决的系统旧R版本:一些仍然在R 2.x.

packages r

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

显示我的memcpy的kcachegrind未对齐

使用g ++编译一个使用memcpy和在kcachegrind其中显示为使用的函数__memcpy_sse2_unaligned.

有没有办法memcpy使用对齐版本?

更新1:这是我创建两个缓冲区的方法

int* dstArr = new int [0x10000];
int* srcArr = new int [0x10000];
Run Code Online (Sandbox Code Playgroud)

c++ sse libc

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

R中的特定日期格式转换问题

基本上我想知道为什么as.Date(200322,format="%Y%W")给我NA.虽然我们在这里,但我会感谢任何有关R中重复横截面(又称伪面板)的数据结构的建议.我确实得到aggregate()了(有点)工作,但它不够灵活 - 它错过了数据例如,当我省略错过的值时,列.具体来说,我有一个调查,每周重复一次,有一堆类似的问题答案,我想在两个方面结合,平均,条件和情节.获得正确的日期转换应该可以帮助我实现动物园套餐或类似的目标.

任何输入都表示赞赏.

更新:感谢字符串建议,但正如您在自己的示例中所看到的,%W部分不起作用 - 它只在设置当前日期时标识年份,而我需要设置特定周(并将日期留空).

r date

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

标签 统计

r ×7

c++ ×2

clang++ ×1

compression ×1

cran ×1

date ×1

error-handling ×1

libc ×1

openmp ×1

packages ×1

r-package ×1

sse ×1

string ×1