R-单位向量

R-单位向量,r,R,这可能是一个重复的问题,但可能我只是没有使用适当的关键字来找到我要找的 目前,如果我有一个向量x,如果我想要一个单位等价物,我会这样做 x_unit <- x/sum(x) x\u unit这里有一个小函数,可以满足您的要求: unit_vec <- function(vec){ return(vec/(sqrt(sum(vec**2,na.rm=TRUE)))) } 当总和也为0时,它也起作用 > vec2 [1] 10 -10 > unit_vec(

这可能是一个重复的问题,但可能我只是没有使用适当的关键字来找到我要找的

目前,如果我有一个向量
x
,如果我想要一个单位等价物,我会这样做

x_unit <- x/sum(x)

x\u unit这里有一个小函数,可以满足您的要求:

unit_vec <- function(vec){
   return(vec/(sqrt(sum(vec**2,na.rm=TRUE))))
}
当总和也为0时,它也起作用

 > vec2
 [1]  10 -10
 > unit_vec(vec2)
 [1]  0.7071068 -0.7071068
!> sqrt(sum(unit_vec(vec2)**2,na.rm=TRUE))
 [1] 1

我希望这能有所帮助。

对于你的第二个问题,有
x/sum(x,na.rm=TRUE)
。。。当
sum(x)=0
时,您认为正确的答案应该是什么?我已经在为分母添加max语句等,它变得单调重复。当和为零时,它确实起作用,但它是一个不同于OP请求的缩放标准(它按L2范数/RMS而不是总和进行缩放…),您是对的。对不起,我误解了。如果按和进行缩放,我不确定除以0是否有意义。如果sum(vector)==0,我们可以在函数中添加一个stop。你觉得呢?很方便,我一直在研究非负数的数字。正因为如此,我可以做如下事情:
x/ifelse(sum(x)=0,1,sum(x))
 > vec2
 [1]  10 -10
 > unit_vec(vec2)
 [1]  0.7071068 -0.7071068
!> sqrt(sum(unit_vec(vec2)**2,na.rm=TRUE))
 [1] 1