在R中,将向量缩放为单位向量的最简单方法是什么?

10

R中将向量缩放为单位向量的最简单方法是什么?

例如,假设

>vec
[1] 1 0 2 1

>vec / sqrt(sum(vec^2)) 
[1] 0.4082483 0.0000000 0.8164966 0.4082483

它是其单位向量。

R语言中是否有一些内置函数可以实现此功能?


R在矩阵代数功能方面仍然较弱。 - tomka
基本函数scale()可以执行sqrt(sum(x^2)/(n-1)),但这并不完全是您要寻找的内容。 - Vorac
2个回答

12
你可以自己编写一个函数:
scalar1 <- function(x) {x / sqrt(sum(x^2))}

现在只需要使用:

> scalar1(vec)
[1] 0.4082483 0.0000000 0.8164966 0.4082483

0.4082483是未知的,需要从vec中计算得出。我的意思是,如果在R中有一个内置函数可以实现这个功能。例如,如果有一些aaa使得aaa(vec,...)= c(0.4082483,0.0000000,0.8164966,0.4082483)。 - Tom
据我所知,没有内置函数可以执行 x / sqrt(sum(x^2)),但是您可以自己编写一个快速函数。我已编辑答案以反映这一点。这有帮助吗? - user4275591
1
无论如何,非常感谢。我知道这是一种方法,但我想知道在R中是否有一个内置函数可以进行这种常见的计算,而我尚未找到它。 - Tom

3

ppls 软件包包含函数 normalize.vector,可以完全满足您的需求。然而,加载一个软件包似乎并不比自己输入函数的一行定义更简单...

自 2020-05-04 起,ppls 已在 CRAN 上停用,因此无法使用 install.packages("ppls") 进行安装。但仍然可以使用以下命令安装最新版本:

install.packages("https://cran.r-project.org/src/contrib/Archive/ppls/ppls_1.6-1.1.tar.gz", repos = NULL)

我已经检查过在R 4.0.0中安装是有效的。然而,请注意,这并不能保证所有的函数都能正常工作,甚至不能保证它们会在未来的R版本中正常工作。


很遗憾,ppls包在R版本4.0.0中不可用。 - Mehmet Yildirim
是的,你说得对。该软件包已于2020年5月14日归档:https://cran.r-project.org/package=ppls - Stibu
任何人如何使用它?它能与R的旧版本兼容吗? - Mehmet Yildirim
这里的问题不是该软件包无法与R 4.0.0一起使用,而是它已经在CRAN上被归档。您无法在任何版本的R中使用install.packages("ppls")安装它。但是,您仍然可以使用install.packages("install.packages("https://cran.r-project.org/src/contrib/Archive/ppls/ppls_1.6-1.1.tar.gz", repos = NULL)安装该软件包。我已经检查过在R 4.0.0中安装可以正常工作,但这并不能保证所有功能都能正确运行。 - Stibu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接