如果出现错误情况,如何编写允许我在代码中执行不同路径的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()在错误条件下运行.
是否还有其他版本可以为每个字符串设置首字母,而且对于flac perl也是FALSE?
name<-"hallo"
gsub("(^[[:alpha:]])", "\\U\\1", name, perl=TRUE)
Run Code Online (Sandbox Code Playgroud) 我需要自动化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) 我认为将一个包的内部数据集放入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) 我的包中的某些函数使用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使用更少的平台上失败.
也许我只是以错误的方式接近这个.
我想我已经发现了一个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进行报告.谢谢.
我是一个软件包开发人员,想要说明在DESCRIPTION文件中使用我的软件包所需的最低R版本.
available.packages 解析包的描述,但结果不是(容易)机器可读的查找递归依赖,因为Imports和Depends字段是逗号分隔的文本,有时包含包有版本要求.
解决方案中描述的解决方案: 列表R包依赖性而不安装包不是递归解决方案.如果嵌套依赖关系需要R> 3.3,我想知道它.
至少,我希望看到给定CRAN包的R和导入,链接和依赖包的最低版本.更好的是列出设置最小R或包版本的包或包.
通过消除具有更高版本要求的依赖关系,我可以为更多人提供他们无法解决的系统旧R版本:一些仍然在R 2.x.
使用g ++编译一个使用memcpy和在kcachegrind其中显示为使用的函数__memcpy_sse2_unaligned.
有没有办法memcpy使用对齐版本?
更新1:这是我创建两个缓冲区的方法
int* dstArr = new int [0x10000];
int* srcArr = new int [0x10000];
Run Code Online (Sandbox Code Playgroud) 基本上我想知道为什么as.Date(200322,format="%Y%W")给我NA.虽然我们在这里,但我会感谢任何有关R中重复横截面(又称伪面板)的数据结构的建议.我确实得到aggregate()了(有点)工作,但它不够灵活 - 它错过了数据例如,当我省略错过的值时,列.具体来说,我有一个调查,每周重复一次,有一堆类似的问题答案,我想在两个方面结合,平均,条件和情节.获得正确的日期转换应该可以帮助我实现动物园套餐或类似的目标.
任何输入都表示赞赏.
更新:感谢字符串建议,但正如您在自己的示例中所看到的,%W部分不起作用 - 它只在设置当前日期时标识年份,而我需要设置特定周(并将日期留空).