Rtools更多的是作为R环境在Windows上进行包编译和扩展开发的一个桥梁,而OpenBLAS则是更偏重于矩阵运算的底层库
也有助于安装和使用C/C++或Fortran等其他编程语言编写的扩展包。Rtools搭载了一套强大的GNU编译器集合,支持多种编程语言的编译。在这种背景下,如果你需要在R环境中使用C++, Fortran等编译的代码/函数,或者需要自行安装一些源代码形式的R包,那就需要Rtools来完成这项工作。
OpenBLAS则是一个开源的线性代数库,为各种深度学习、高性能计算等场景提供高效的BLAS(基础线性代数子程序)和LAPACK(线性代数函数库)接口函数实现。建立在这一基础之上,OpenBLAS帮助开发者进行高级的矩阵运算,包括矩阵乘法、向量运算等。
方式1 在RStudio中使用Rcpp Rtools 安装在C:\RBuildTools 2.8G大小。
1
| install.packages("Rcpp") library(Rcpp)自动会安装rtools
|
方式2 Rtools手动安装到D:\Software\R\rtools43。我c盘空间不够了。指定到d盘
下载地址https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/windows/Rtools/。
安装好后要添加系统环境变量path中
D:\Software\R\rtools43
D:\Software\R\rtools43\usr\bin
和D:\Software\R\rtools43\x86_64-w64-mingw32.static.posix\bin。 如果不指定这个 报错找不到g++
或者手动指定下面环境变量
1
2
3
4
5
6
7
8
9
10
| Sys.setenv(PATH = paste("D:/Software/R/rtools43/usr/bin", Sys.getenv("PATH"), sep=";"))
Sys.setenv(PATH = paste("D:/Software/R/rtools43/x86_64-w64-mingw32.static.posix/bin", Sys.getenv("PATH"), sep=";"))
#Sys.setenv(PATH = paste("D:/Software/R/rtools43/mingw_64/bin", Sys.getenv("PATH"), sep=";"))
#Sys.setenv(BINPREF = "D:/Software/R/rtools43/mingw_$(WIN)/bin/")
system('gcc -v')
system('make -v')
system('g++ -v')
library(Rcpp) #
|
可以导入了 不需要再安装rtools 。
创建Rcpp函数:使用cppFunction()或sourceCpp()函数。「cppFunction」允许你定义C++函数,并在R环境中直接调用
1
2
3
4
| cppFunction('int add(int x, int y) {
return x + y;
}')
add(2, 3) # Output: 5
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| library(Rcpp)
cppFunction('NumericMatrix createMatrix(int n, double value) {
NumericMatrix mat(n, n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
mat(i, j) = value;
}
}
return mat;
}')
#使用Rcpp创建的函数来创建6*6矩阵,并填充值为1.23
mat <- createMatrix(6, 1.23)
print(mat)
#install.packages("RcppArmadillo")
|
1
2
3
4
5
6
7
8
| library(Rcpp)
sourceCpp("E:/lxh/mafld_血镉_睡眠障碍/matrixMultiplication.cpp") # 替换为你的cpp文件的具体路径
mat1 = matrix(1:6, nrow=3, byrow=TRUE)
mat2 = matrix(1:6, nrow=2, byrow=TRUE)
result = matrixMultiply(mat1, mat2)
print(result)
|
下面是进行了2x2矩阵的乘法运算。A和B分别为两个2x2矩阵,代码将他们相乘并将结果赋值给multi_result
1
2
3
4
5
6
7
8
|
> A <- matrix(c(1, 2, 3, 4), nrow=2)
> B <- matrix(c(5, 6, 7, 8), nrow=2)
> multi_result <- A %*% B
> print(multi_result)
[,1] [,2]
[1,] 23 31
[2,] 34 46
|
下面是一个向量相加的操作。a, b为两个长度为3的一维向量,此段代码将他们相加并且将结果赋值给add_result
1
2
3
4
5
| a <- c(1, 2, 3)
b <- c(4, 5, 6)
add_result <- a + b
print(add_result)
[1] 5 7 9
|
实现了两次矩阵乘法运算。首先,它将2x2矩阵A和B相乘得到新的2x2矩阵D,然后将D和另一个2x2矩阵C相乘得到multi_result
1
2
3
4
5
6
7
8
9
| > A <- matrix(c(1, 2, 3, 4), nrow=2)
> B <- matrix(c(5, 6, 7, 8), nrow=2)
> C <- matrix(c(1, 2, 3, 4), nrow=2)
> D <- A %*% B
> multi_result <- D %*% C
> print(multi_result)
[,1] [,2]
[1,] 85 193
[2,] 126 286
|
计算上述两个向量(a和b相加得到的向量c)的长度。根据输出结果,长度计算是正确的
1
2
3
4
5
6
| > a <- c(1, 2, 3)
> b <- c(4, 5, 6)
> c <- a + b
> length_c <- sqrt(sum(c^2))
> print(length_c)
[1] 12.4499
|
计算两个向量a和b的余弦相似度。它先计算两个向量的点乘然后除以两个向量长度的乘积。根据输出结果,
1
2
3
4
5
| > a <- c(1,2,3)
> b <- c(4,5,6)
> similarity <- sum(a*b) / (sqrt(sum(a^2)) * sqrt(sum(b^2)))
> print(similarity)
[1] 0.9746318
|