vectorization - Vectorising an R function -


i have following function

f <- function(x){sum(g(x - x))} 

where

x - n-dimensional vector data g vecrtorized function 

how can vectorize function f take n-dimensional input , yield n-dimensional output?

i trying following

rowsums(sapply(x, "-", x)) 

the problem approach not cover case of one-dimensional x. possible cover both cases? example let

x <- c(1,2,3) x <- c(6,9,1) g <- function(x){x^2} 

if use sapply-based code correct answer (n-dimensional vector)

rowsums(sapply(x, "-", x)) [1] -12 -21   3 

but if set x=1 , run same code, wrong answer (n-dimensional vector instead of scalar)

rowsums(sapply(x, "-", x)) [1] -5 -8  0 

this not surprising, since rowsums applied column-vector gives column vector. need in case of one-dimensional x, apply sum. there elegant way without using if conditional on dimensions?

it seems have 2 examples, i've named them f , h:

x <- c(6,9,1)  g <- function(x){x^2} f <- function(x){sapply(x,function(x)sum(g(x - x)))}  f(1)  # [1] 89 f(1:3) # [1] 89 66 49  h <- function(x){colsums(sapply(x,function(x) x-x))} h(1) # [1] -13 h(1:3) # [1] -13 -10  -7 

it looked colsums looking there.


Comments

Popular posts from this blog

jquery - How can I dynamically add a browser tab? -

node.js - Getting the socket id,user id pair of a logged in user(s) -

keyboard - C++ GetAsyncKeyState alternative -