【问题标题】:In R, what's the simplest way to scale a vector to a unit vector?在 R 中,将向量缩放为单位向量的最简单方法是什么?
【发布时间】:2015-02-11 21:22:23
【问题描述】:

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

例如,假设

>vec
[1] 1 0 2 1

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

是它的单位向量。

R 中有一些内置函数吗?

【问题讨论】:

  • R 在矩阵代数功能上似乎仍然很弱
  • 基本函数scale() 可以做sqrt(sum(x^2)/(n-1)),但这不是你想要的。

标签: r vector scaling


【解决方案1】:

ppls 包包含函数normalize.vector,它完全符合您的要求。不过,加载一个包似乎并不比自己输入一行函数定义简单多少……

自 2020 年 5 月 4 日起,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。
  • 是的,你是对的。该包已于 2020-05-14 存档:cran.r-project.org/package=ppls
  • 任何人都可以使用它吗?它是否适用于 R 的早期版本?
  • 这里的问题不在于该包不适用于 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 中可以正常工作,但这并不能保证所有功能都能正常工作。
【解决方案2】:

你可以让自己成为一个函数:

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)
  • 据我了解,x / sqrt(sum(x^2)) 没有内置函数,但您可以创建自己的快速函数。我编辑了答案以反映这一点。这有帮助吗?
  • 谢谢。我也知道这是一种方法,只是想知道 R 中可能有一个内置函数用于我没有找到的这种常见计算。
猜你喜欢
  • 2012-02-05
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
相关资源
最近更新 更多