小编Bea*_*eld的帖子

适用于嵌套函数

这不是一个真正的问题,但我想知道是否有更优雅的解决方案:

让我说我有一个向量vec <- rlnorm(10),我想对它应用一个非向量化的函数,例如exp(忽略它被矢量化的那一刻),我可以做

sapply( vec, exp )
Run Code Online (Sandbox Code Playgroud)

但是当我想要应用的函数嵌套时,表达式变得不那么简单:

sapply( vec, function(x) exp( sqrt(x) ) )
Run Code Online (Sandbox Code Playgroud)

这种情况一直发生在我applyplyr家人身上.

所以我的问题是,通常是一种优雅的方式来嵌套(或管道)函数而不明确定义(匿名)函数function(x){...}?就像是

# notrun
sapply( vec, sqrt | exp )
Run Code Online (Sandbox Code Playgroud)

或类似的.

functional-programming r apply

4
推荐指数
2
解决办法
3382
查看次数

sub():反向引用的处理

说我有一个像"C5Cl2NO2S"这样的分子式,我想用R计算分子量.我最简单的方法是使用正则表达式来分析公式并将其拆分为元素组件,然后将它们交给执行计算的单独函数.但是,我面临的问题是,当我交出RegEx的反向引用时,这些不会被评估,而是以"\\ 1","\\ 2"的形式移交.

这是我的尝试:

masses <- list(
  C  = 12,
  H  = 1.01,
  Cl = 34.97,
  N  = 14.00,
  O  = 15.99,
  P  = 30.97,
  S  = 31.97
)

elementMass <- function( element, count ) {
  if( count == "" ) {
    count <- "1"
  }
  return( as.character( masses[[ element ]] * as.numeric( count ) ) )
}


sumFormula2Mass <- function( x ){
  y <- 0.0
  for( e in x ) {
    if( e != "" ) {
      y <- …
Run Code Online (Sandbox Code Playgroud)

regex r

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

1 xm矩阵的尺寸?

R几乎每天都一次又一次地让我感到惊讶:

m <- matrix( 1:6, ncol=2 )
while( dim(m)[1] > 0 ){
  print(m);
  m <- m[-1,]
}
Run Code Online (Sandbox Code Playgroud)

得到:

     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
     [,1] [,2]
[1,]    2    5
[2,]    3    6
Error in while (dim(m)[1] > 0) { : argument is of length zero
Run Code Online (Sandbox Code Playgroud)

R有1xn矩阵的问题或我的错误在哪里?

> nrow( m[-c(2,3), ] )
NULL
> dim( m[-c(2,3), ] )
NULL
> m[-c(2,3), ][,1]
Error in m[-c(2, 3), ][, 1] : incorrect number of dimensions
> str( m[-c(2,3), …
Run Code Online (Sandbox Code Playgroud)

r

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

创建一个值为字符和数字混合的序列

我正在使用Postgres 9.1,并希望创建一个我可以用作主键的序列,它应该如下所示:

| entity_id_seq |
-----------------
|         X0001 |
|         X0002 |
           ....
|         X0123 |
Run Code Online (Sandbox Code Playgroud)

nextval( 'entity_id_seq' )会回来'X0124'.

任何想法是如何以及如果这可以用纯Postgres?

非常感谢!

postgresql

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

数值精度和对数

我有一个问题(至少我认为我有问题),计算如下:

ppm <- 20
mDa <- 2
x <- c( 100, 100.002 )

base  <- 1 + ((x * ppm * 1E-6) + (mDa * 1E-3))/x
base
# [1] 1.00004 1.00004
base - 1.00004
# [1]  0.00000e+00 -3.99992e-10

logb( x[2], base[2] ) - logb( x[1], base[1] )
# [1] 1.651291
Run Code Online (Sandbox Code Playgroud)

但是,我本来期望结果是近似的 0.5,因为我预计两种情况下的基数大约是 1.00004:

logb( x[2], 1.00004 ) - logb( x[1], 1.00004 )
# [1] 0.500005
Run Code Online (Sandbox Code Playgroud)

虽然我手头没有证据,但我怀疑结果在logb( x[2], 1.00004 ) - logb( x[1], 1.00004 )数学上是否正确,我认为我遇到了数值精度问题.如何避免这个问题的任何想法都非常感谢. …

floating-point logarithm r

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