小编Nic*_*edy的帖子

计算尺寸> 3的欧拉角/ Tait-Bryan角的模拟

在试图回答另一个SO问题时,出现了如何计算尺寸> 3的欧拉角的问题.该RSpincalc软件包具有直接的DCM2EA功能,可将3d旋转矩阵转换为Euler或Tait-Bryan角度,但这仅处理3维的特定情况.关于欧拉角维基百科页面简要讨论了将欧拉角扩展到更高维度的问题,并引用了一篇意大利语论文,该论文显然将该方法推广到更大数量的维度.不幸的是,我的意大利语和我的数学都没有完全掌握这篇论文并创建一个可用的R函数.

至少可以说,我在这个答案中使用的当前方法有点麻烦.我使用Ryacas包来创建一个符号矩阵,它是一系列旋转的复合,用于任意数量的维度.然后可以针对已知的旋转矩阵迭代地求解,以找到所需的角度.它有效,但一旦维数为5或更多,它就变得越来越慢.

是否有更好的方法来实现这一目标,无论是通过意大利报纸中的方法实施还是其他方式?

math geometry r rotation euler-angles

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

如何在其命名空间中使用导出而不是S3method的另一个包中的S3方法,而不使用Depends或library()

我目前正在制作一个R包,并试图遵循Hadley Wickham在http://r-pkgs.had.co.nz提供的最佳实践指南.作为其中的一部分,我的目标是在DESCRIPTION文件的Imports部分中拥有所有的包依赖,而不是取决于因为我同意不会不必要地改变全球环境的理念(许多CRAN和Bioconductor包都没有似乎跟着).

我想在我的一个包函数中使用Bioconductor包rhdf5中的函数h5write().我现在遇到的问题是它的NAMESPACE中没有声明它的S3方法.它们是使用(例如)声明的

export(h5write.default)
export(h5writeDataset.matrix)
Run Code Online (Sandbox Code Playgroud)

而不是

S3method(h5write, default)
S3method(h5writeDataset, matrix)
Run Code Online (Sandbox Code Playgroud)

通用h5write定义为:

h5write <- function(obj, file, name, ...) {
res <- UseMethod("h5write")
  invisible(res)
}
Run Code Online (Sandbox Code Playgroud)

实际上,这意味着对rhdf5 :: h5write的调用失败,因为没有注册适当的h5write方法.

据我所知,有三种解决方案:

  1. 使用Depends而不是Imports在DESCRIPTION文件中.
  2. 使用library("rhdf5")require("rhdf5")代码中的相关功能.
  3. 修改NAMESPACE文件以使用rhdf5 S3methods()而不是export().

所有这些都有缺点.选项1表示即使从不调用我的包中的相关函数,也会加载包并将其附加到全局环境.选项2意味着library在包中使用,同时再将包附加到全球环境中,并且根据Hadley Wickham的指南也弃用.选项3意味着依赖于另一个包作者来更新他们在Bioconductor上的包,并且还意味着不再导出S3方法,这反过来又会破坏依赖于明确调用它们的其他包.

我错过了另一种选择吗?我已经在其他地方查看了StackOverflow并发现以下有些相关的问题从另一个包导入S3方法以及 如何导出S3方法以便在命名空间中可用?但没有任何直接解决我的问题.值得注意的是,与这两者中的第一个的关键区别在于泛型和方法都在同一个包中,但问题在于使用export而不是S3method.

用于重现错误的示例代码(无需创建包):

loadNamespace("rhdf5")
rdhf5::h5write(1:4, "test.h5", "test")

Error in UseMethod("h5write") : 
no applicable method for 'h5write' applied to an object of class
"c('integer', …
Run Code Online (Sandbox Code Playgroud)

r package r-s3 r-package

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

扩展dplyr并使用内部函数

我正在开发RSQLServer包的一个分支,我正在尝试实现连接.使用当前版本的软件包,可以使用任何DBI连接的数据库进行连接sql_join.DBIConnection.但是,该实现对SQL Server不起作用.例如,USINGSQL服务器不支持使用它.

我有一个这个功能的版本sql_join.SQLServerConnection工作(虽然尚未完成).我sql_join.DBIConnection尽可能地基于我的功能.有一个问题我已经是sql_join.DBIConnection调用内的一些非导出的函数dplyr,例如common_by.现在,我通过使用来解决这个问题dplyr:::common_by,但我知道这不是理想的做法.

我是不是该:

  1. 请问Hadley Wickham/Romain Francois导出相关功能,以便让开发包构建的人们的生活更轻松dplyr
  2. 将内部函数复制到我正在处理的包中?
  3. 继续使用:::运算符来调用函数?
  4. 别的什么?

显然,使用选项3,接口可能会发生变化(因为它们不是导出函数),并且封装会在较长时间内中断.

示例代码:

sql_join.SQLServerConnection <- function (con, x, y, type = "inner", by = NULL, ...) {
  join <- switch(type, left = sql("LEFT"), inner = sql("INNER"), 
                 right = sql("RIGHT"), full = sql("FULL"), stop("Unknown join type:", 
                                                                type, call. = FALSE))
  by <- dplyr:::common_by(by, x, y)
  using <- FALSE # all(by$x …
Run Code Online (Sandbox Code Playgroud)

sql r r-s3 dplyr

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

R中使用的Github API的授权代码

我正在尝试访问API以获取有关http://github.com的信息.我在github(在开发人员应用程序中)的应用程序中为此URL创建并尝试使用httr库访问R.以下是代码

library(httr)
oauth_endpoints("github")
myapp <- oauth_app("github",key = "#####################",secret = "########################" )
Run Code Online (Sandbox Code Playgroud)

(密钥被替换为客户端ID,秘密被替换为secred id)

github_token <- oauth2.0_token(oauth_endpoints("github"), myapp)
Run Code Online (Sandbox Code Playgroud)

这提示我以下内容

使用本地文件在R会话之间缓存OAuth访问凭据?1:是2:不

我选择了2(因为我之前尝试过选项1),然后显示以下内容

httpuv not installed, defaulting to out-of-band authentication
Please point your browser to the following url: 

  https://github.com/login/oauth/authorize?client_id=72939e1b6d499f4f1894&scope=&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code
Run Code Online (Sandbox Code Playgroud)

输入授权码可以任何人告诉我授权码是什么吗?

r oauth

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

Postgres SQL状态:22P02

我需要在Postgres中运行以下查询:

select left(file_date, 10) as date, lob_name, devicesegment, sum(conversion_units::numeric) as units
from bac_search.dash_search_data
where (lob_name= 'Mortgage' and file_date::date between (CURRENT_DATE - INTERVAL '30 days') and CURRENT_DATE)
      or (lob_name= 'Loans' and file_date::date between (CURRENT_DATE - INTERVAL '30 days') and CURRENT_DATE)
group by file_date, lob_name, devicesegment
order by file_date, lob_name, devicesegment;
Run Code Online (Sandbox Code Playgroud)

尽管将conversion_units设置为numeric,但它给出了以下错误:

ERROR:  invalid input syntax for type numeric: ""
********** Error **********

ERROR: invalid input syntax for type numeric: ""
SQL state: 22P02
Run Code Online (Sandbox Code Playgroud)

值得注意的是,我已经完成了一些单元测试,当我为Mortgage运行此查询并删除贷款行时,它运行正常.我已经分离出的问题conversion_units::numericLoans.除了通常的转换(我在这里指定),我不知道还有什么可以尝试.我通过这个错误阅读了这些问题,但它们似乎并没有反映我的问题.任何帮助表示赞赏!谢谢!

postgresql

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

R中的字符串内核

我一直在使用"Kernlab"包中的R中可用的stringdot函数.这是我的代码

library(kernlab)
x <- c("1","2","3")
y <- c("3","2","1")
lst <- list(x, y)
sk <- stringdot(length = 2, lambda = 1.2, type = "exponential", normalized = TRUE)
q <- kernelMatrix(sk,lst)
Run Code Online (Sandbox Code Playgroud)

据我所知,指数内核将创建长度为2的子串.例如,这里的字符串将1-2,1-3,2-3来自第一个向量和3-2,3-1,2-1第二个向量.它将尝试通过创建给定长度的各种子串来匹配输入,并根据给定的值减少子串的权重lambda.

根据我的预期,输出应包含(x,x)和(y,y)的值1和(x,y)的值0,因为给定输入之间没有共同的子串,但输出显示(x,y)对的值为0.4723.

我不明白为什么x和y之间的相似性是0.4723.

r machine-learning data-mining

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

在不引入依赖关系的情况下,在 R 包中定义 S3 方法的首选方法是什么?

我有一个 R 包(目前不在 CRAN 上),它定义了来自其他包(特别是knitr::knit_printhuxtable::as_huxtable)的几个通用函数的 S3 方法。但是,它们不是我的包的关键部分,所以我不想在用户安装我的包时创建对这些包的依赖。在 R 4.0.0 之前,我导出了 S3 方法而不导入泛型。使用roxygen2,我的@export指令被翻译成export()NAMESPACE 中的指令而不是S3method(). 这在 R 版本 < 4.0.0 中运行良好,因为 R 首先在全局环境中查找匹配generic_function.class方法,而不是依赖于 S3 方法的正确注册。但是,根据developer.r-project.org 上的这篇博客,R 不再查找未注册的 S3 方法。

最好的方法是什么?现在,我已经@importFromroxygen2块中添加了指令,并将两个包都添加到了说明的导入部分。但是,据我所知,这意味着安装我的软件包的任何用户都必须安装knitrhuxtable无论他们是否愿意。

r project r-s3 roxygen2

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

R:总结多个变量的观测数量的最快方法

我确信这是一个非常简单的事情,但我找不到一个非常快速和简单的解决方案.

我有许多列的患者数据,格式如下:

patID   disease   category ...
1       1          A
2       0          B
3       1          C
4       1          B
Run Code Online (Sandbox Code Playgroud)

如何快速生成汇总表,其中包括数据框中每列/变量的观察数量?结果应该是这样的:

VARIABLE     Number of rows
disease:1    3
disease:0    1
category:A   1
category:B   2
category:C   1
...
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过使用table(data $ column)为单个变量执行此操作.但是,如何为数据框中的所有列生成类似的内容?

r summary dplyr

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

R 使用 as.Date() 转换带有 BST/GMT 标签的 POSIXct 日期

我需要在动物园对象的索引上使用 as.Date。一些日期在 BST 中,因此在转换时,我(仅)在这些条目上损失了一天。我根本不关心一小时的差异,甚至不关心日期的时间部分,我只想确保显示的日期保持不变。我猜这不是很难,但我无法做到。有人可以帮忙吗?

class(xtsRet)
#[1] "xts" "zoo"

index(xtsRet)
#[1] "2007-07-31 BST" "2007-08-31 BST" "2007-09-30 BST" "2007-10-31 GMT"

class(index(xtsRet))
#[1] "POSIXt"  "POSIXct"

index(xtsRet) <- as.Date(index(xtsRet))

index(xtsRet)
#[1] "2007-07-30" "2007-08-30" "2007-09-29" "2007-10-31"
Run Code Online (Sandbox Code Playgroud)

最小可重复的示例(不需要zoo包装):

my_date <- as.POSIXct("2007-04-01") # Users in non-UK timezone will need to
                                    # do as.POSIXct("2007-04-01", "Europe/London")
my_date
#[1] "2017-04-01 BST"

as.Date(my_date)
#[1] "2017-03-31"
Run Code Online (Sandbox Code Playgroud)

r date posixct binary-search-tree xts

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