(Acest articol a fost publicat pentru prima dată pe pacha.dev/blogși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)
Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.
Notă în stil donații Wikipedia: Din cauza întârzierilor cu plata bursei mele, dacă această postare vă este utilă, vă cer cu drag o donație minimă pentru a -mi cumpăra o cafea. Acesta va fi folosit pentru a continua eforturile mele open source. Explicația completă este aici: un mesaj personal de la un contribuabil open source.
Adaptat din depanarea RCPP cu VSCODE. Mulțumesc mult domnului Jinyang Liu pentru postarea inițială!
Pentru referință, folosesc un ThinkPad X1 cu următoarea versiune R:
> sessionInfo() R version 4.5.1 (2025-06-13) Platform: x86_64-pc-linux-gnu Running under: Manjaro Linux Matrix products: default BLAS/LAPACK: /usr/lib/libopenblas.so.0.3; LAPACK version 3.12.0
Instalați vscode dacă nu ați făcut -o deja. Adăugați următoarele extensii:
Codellb este debuggerul pe care îl veți folosi pentru a depana codul C ++.
Pentru a depana codul C ++ cu CPP11Armadillo, va trebui să vă înfășurați codul într -un pachet R.
Creați un pachet R într -un director la alegere cu:
cd ~/Downloads && R
cpp11armadillo::pkg_template("blogpost")
Structura pachetului corespunde:
.
├── cleanup
├── configure
├── DESCRIPTION
├── dev
│ ├── 01_load_or_install.R
│ ├── 02_test.R
│ ├── 03_readme_and_license.R
│ └── data.r
├── NAMESPACE
├── R
│ └── blogpost-package.R
├── README.md
└── src
├── 00_main.h
├── 01_ols.cpp
├── 02_your_functions.cpp
├── Makevars.in
└── Makevars.win
Vom avea nevoie de următoarele pachete pentru a depana codul C ++:
- DevTools: pentru construirea pachetelor R
- Usethis: Ajută la configurarea scheletelor de pachete
- Testthat: pentru testarea unității
- vscdebugger: conectează codul R la debuggerul vscode
- CPP11Armadillo: Pentru a arăta un exemplu de algebră liniară în această postare pe blog
if (!require(devtools)) install.packages("devtools")
if (!require(usethis)) install.packages("usethis")
if (!require(testthat)) install.packages("testthat")
if (!require(vscDebugger)) install.packages("vscDebugger", repos = "https://manuelhentschel.r-universe.dev")
Conectați debuggerul vscode, astfel încât să puteți depana codul CPP11. În funcție de sistemul dvs. de operare și de instalarea R, acest pas nu va fi exact același, așa că vă rugăm să adaptați căile și setările, după cum este necesar.
Rulați următoarele comenzi R:
R.home("include")
.libPaths()
Deschideți paleta de comandă (CTRL + SHIFT + P), tastați „Editați configurații” și selectați „C/C ++: Editați configurații (JSON)”. În cazul meu care se deschide c_cpp_properties.json conținând:
{
"configurations": (
{
"name": "Linux",
"includePath": (
"${workspaceFolder}/**",
"~/R/x86_64-pc-linux-gnu-library/4.5/cpp11/include/*",
"/usr/include/R/*"
),
"defines": (),
"compilerPath": "/usr/bin/clang",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "linux-clang-x64"
}
),
"version": 4
}
Modificați aceste linii din codul JSON anterior în conformitate cu cele două comenzi R anterioare:
"~/R/x86_64-pc-linux-gnu-library/4.5/cpp11/include/*", "/usr/include/R/*"
Dacă vă confruntați cu probleme de compilare, creați un fișier MakeVars în SRC/ cu:
PKG_CPPFLAGS = -I/OPT/HomeBrew/Lib/R/4.3/Site -Library/RCPP/include
Reglați calea după cum este necesar pentru configurarea dvs.
Deschideți folderul de pachete din fișier -> deschide folderul în vscode și după deschiderea unui terminal R de tip:
usethis::use_test("ols")
Pentru acest test verific dacă ols_mat(y,x) Funcție în src/01_ols.cpp dă același rezultat ca estimatorul OLS
:
test_that("simple OLS test", {
y <- as.matrix(mtcars$mpg)
x <- cbind(1, as.matrix(mtcars$wt))
expect_equal(solve(t(x) %*% x) %*% (t(x) %*% y), ols_mat(y, x))
})
Puteți rula următoarele comenzi pentru a înregistra funcțiile și a verifica echivalența:
devtools::document() devtools::test()
Testul ar trebui să treacă.
Dacă nu există .vscode Director în rădăcina pachetului dvs., creați -l din meniul din stânga din vscode și creați un launch.json fișier în interiorul său.
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
{
"version": "0.2.0",
"configurations": (
{
"name": "(lldb) Launch",
"type": "lldb",
"request": "launch",
"program": "/usr/bin/R",
"args": (
"--vanilla",
"-e",
"devtools::test()"
),
"env": {
"R_HOME" : "/usr/lib64/R"
},
"terminal": "console",
"stopOnEntry": false
}
)
}
Verificați că „Programul” și „R_HOME” se potrivesc cu configurația R (verificați R.home() din r).
Deschide src/01_ols.cpp și setați un punct de întrerupere făcând clic la stânga numărului de linie. Am adăugat un punct de întrerupere în linia șaisprezece.
Accesați fila Debugger din VSCODE și faceți clic pe butonul de redare de lângă configurația de lansare. Aceasta va începe sesiunea de depanare.


Când se numește funcția C ++, debuggerul se va întrerupe la punctul dvs. de întrerupere, permițându -vă să inspectați variabilele și să treceți prin cod.
Puteți utiliza, de asemenea, consola de depanare pentru a trimite comenzi direct la LLDB.
