<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Saleh Salehizadeh</title>
        <link>https://virgool.io/feed/@animatorsaleh</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 20:53:17</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/5283/avatar/avatar.png?height=120&amp;width=120</url>
            <title>Saleh Salehizadeh</title>
            <link>https://virgool.io/@animatorsaleh</link>
        </image>

                    <item>
                <title>نوشتن کد با سرعت اجرای بیشتر با rcpp برای R</title>
                <link>https://virgool.io/@animatorsaleh/%D9%86%D9%88%D8%B4%D8%AA%D9%86-%DA%A9%D8%AF-%D8%A8%D8%A7-%D8%B3%D8%B1%D8%B9%D8%AA-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D8%A8%DB%8C%D8%B4%D8%AA%D8%B1-%D8%A8%D8%A7-rcpp-%D8%A8%D8%B1%D8%A7%DB%8C-r-nkfbhzzyhyy9</link>
                <description>در مورد زبان‌های سطح بالایی مثل R یا متلب، همیشه توصیه می‌شه که از قابلیت‌های built-in استفاده کنید. مثلا فرض کنید می‌خوایم ضرب داخلی دو بردار با طول مساوی رو پیاده‌سازی کنیم. اول بگم که ضرب داخلی برای دو بردار هم‌طول و برابر با مجموع ضرب عضوهای نظیر تعریف می‌شه. حالا برای این‌کار به شکل معمول داریم:x = c(1,2,5)
y= c(5,3,1)
sum(x*y)و خروجی به شکل: output:[1]16 به دست میاد. اما خیلی وقتا می‌خوایم کاری انجام بدیم که به‌طور طبیعی با اعمال داخلی R قابل انجام نیست. یعنی نمی‌شه به شکل برداری نوشتشون. اون‌وقت لازمه از روش‌های تکراری مثل حلقه‌ی for یا while استفاده کنیم:output = 0
for (i in c(1:3)){
      output = output + x[i] * y[i]
}
اما استفاده از for در زبان‌های سطح بالا به هیچ‌وجه کار بهینه‌ای نیست. و سرعت اجرای برای داده‌های بزرگ‌تر توی اونا به‌شدت کمه و ممکنه شما رو برای حجم زیاد داده‌ها ناکام بذاره. خب چه می‌شه کرد؟ بذارین این سوال رو با یه سوال دیگه هم روبرو کنیم. پکیج‌های R رو که گاها پر از الگوریتمای پیچیده است و نمی‌شه به‌راحتی برداری کرد و پیاده‌سازیشون نیاز به استفاده از مواردی مثل حلقه‌های for داره رو چطور پیاده‌سازی می‌کنن که اینقدر سریع اجرا می‌شن.جواب اینه که پکیج‌های R عمدتا با c++ و fortran نوشته می‌شن و توی R به شکل shared object استفاده می‌شن. چطور می‌تونیم خودمون این کارو بکنیم؟خیلی ساده است. با استفاده از پکیج Rcpp توی R می‌شود کد c++ رو برای R کامپایل کرد. برای استفاده از این پکیج اول اونو نصب می‌کنیم:install.packages(&#039;Rcpp&#039;)به همین سادگی. حالا شما این بسته رو که فراخوانی کنید می‌تونید ازش استفاده کنید و به کمکش کد c++تون رو کامپایل کنید و استفاده کنید:library(&#039;Rcpp&#039;)
برای مثال:
library(Rcpp)
cppFunction(
&quot;int test(NumericVector X, NumericVector Y){
    int len = X.size();
    int output = 0;
    for (int i=0; i&lt;len; i++){
        output += X[i] * Y[i];
    }
    return (output);
    }&quot;)
    test(x,y)و خروجی برابر همون مقدار 16 خواهد بود. اما این‌بار با سرعت اجرای بالاتر از forهای R. همین کار رو می‌تونید تو یه فایل جدا انجامش بدید و با دستور ‍‍sourceCpp فراخوانیش کنید.در کل این پکیج بیشتر از یه پست وبلاگی زمان‌بره و توصیه می‌کنم داکیومنت‌های این پکیج رو بخونید و یه نگاهی هم به مثال‌ها بندازید.همواره اگه اصلاحی برا نوشته‌های من دارید خوشحال می‌شم ببینم.</description>
                <category>Saleh Salehizadeh</category>
                <author>Saleh Salehizadeh</author>
                <pubDate>Sun, 16 Sep 2018 15:01:14 +0430</pubDate>
            </item>
            </channel>
</rss>