这不是一个真正的问题,但我想知道是否有更优雅的解决方案:
让我说我有一个向量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)
这种情况一直发生在我apply和plyr家人身上.
所以我的问题是,通常是一种优雅的方式来嵌套(或管道)函数而不明确定义(匿名)函数function(x){...}?就像是
# notrun
sapply( vec, sqrt | exp )
Run Code Online (Sandbox Code Playgroud)
或类似的.
说我有一个像"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) 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) 我正在使用Postgres 9.1,并希望创建一个我可以用作主键的序列,它应该如下所示:
| entity_id_seq |
-----------------
| X0001 |
| X0002 |
....
| X0123 |
Run Code Online (Sandbox Code Playgroud)
并nextval( 'entity_id_seq' )会回来'X0124'.
任何想法是如何以及如果这可以用纯Postgres?
非常感谢!
我有一个问题(至少我认为我有问题),计算如下:
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 )数学上是否正确,我认为我遇到了数值精度问题.如何避免这个问题的任何想法都非常感谢. …