小编dar*_*een的帖子

使用substitute来获取参数名称

我试图在函数中获取全局环境中的参数名称.我知道我可以使用替换来获取命名参数的名称,但我希望能够用...参数做同样的事情.我有点让它为...的第一个元素工作,但无法弄清楚如何为其余的元素做这件事.知道如何让它按预期工作.

foo <- function(a,...)
{
    print(substitute(a))
    print(eval(enquote(substitute(...))))
    print(sapply(list(...),function(x) eval(enquote(substitute(x)),env=.GlobalEnv)))
}

x <- 1
y <- 2
z <- 3
foo(x,y,z)

x
y
[[1]]
X[[1L]]

[[2]]
X[[2L]]
Run Code Online (Sandbox Code Playgroud)

r

31
推荐指数
2
解决办法
9681
查看次数

具有重定向输出的批处理后台进程

我正在尝试从批处理文件中运行多个后台进程,并将输出定向到文件.是否可以在Windows中执行此操作?这是我尝试过的,但最终导致启动程序的输出而不是后台进程.

start myapp.exe > myapp.out 2>&1
Run Code Online (Sandbox Code Playgroud)

windows cmd batch-file

9
推荐指数
2
解决办法
6313
查看次数

用...来代替 .在R

我怎样才能替换..

我尝试过类似的东西:

names(dataset) <- gsub("[/./.]",".",names(dataset))
Run Code Online (Sandbox Code Playgroud)

但它并不像我希望的那样有效.

regex r

6
推荐指数
2
解决办法
1万
查看次数

简单的梯度增强算法

我正在尝试在R中实现一个简单的梯度增强算法用于回归.这是我到目前为止所提出的,但错误不是像我预期的那样平稳.有什么建议?

data("OrchardSprays")
niter  <- 10
learn  <- 0.05
y      <- OrchardSprays$decrease
yhat   <- rep(0,nrow(OrchardSprays))
weight <- rep(1,nrow(OrchardSprays))
loss   <- function(y,yhat) (y - yhat)^2

for (i in seq(niter))
{
    model  <- lm(decrease~.,weights=weight,data=OrchardSprays)
    yhat   <- yhat + weight * (predict(model) - yhat) / i
    error  <- mean(loss(y,yhat))
    weight <- weight + learn * (loss(y,yhat) - error) / error
    cat(i,"error:",error,"\n")
}
Run Code Online (Sandbox Code Playgroud)

输出:

1 error: 319.5881 
2 error: 318.6175 
3 error: 317.9368 
4 error: 317.6112 
5 error: 317.6369 
6 error: 317.9772 
7 error: 318.5833 …
Run Code Online (Sandbox Code Playgroud)

r machine-learning

5
推荐指数
2
解决办法
2453
查看次数

基于内存使用的火灾事件

我想知道基于R中的内存使用情况来触发事件的好方法是什么.假设我将一堆文件合并到一个主文件中,但整个主文件的大小可能太大而无法保存在内存中.当我接近内存限制时,我想保存当前的主文件和空闲内存.

master <- NULL
partnum <- 1
threshold  <- 0.8
filelist <- list.files(mypath)

for (filename in filelist) 
{
   filedata <- read.csv(filename)
   if (is.null(master)) master <- filedata
   else master <- rbind(master,filedata)
   rm(filedata)

   # test for memory usage here
   # if (usedMemory > availableMemory * threshold)
   # then do the following else go to top of loop

   save(master,file=paste(mypath,partnum,"rData",sep="."))
   master <- NULL
   partnum <- partnum + 1
}
Run Code Online (Sandbox Code Playgroud)

我想做的是能够计算机器上可用的内存量.这样,事件将根据当前的机器使用情况动态触发.假设脚本启动时机器上有10GB可用,因此在使用8GB时进行清理.但是说执行中期另一个用户启动了一个消耗5GB的程序,那么我想在使用4GB时进行清理.

> x <- 1:10^9
> memory.size()
[1] 3832.26
> memory.limit()
[1] 16381
> gc() …
Run Code Online (Sandbox Code Playgroud)

r

5
推荐指数
1
解决办法
126
查看次数

迭代已知维度矩阵的最快方法

我想知道在c/c ++中迭代矩阵的最快方法是什么.

到目前为止,我提出的最佳方法是将矩阵映射到单个维度.

然后使用指针算法,任何其他可能更快的方法?

维度在运行时是已知的但不是编译时间,矩阵是完全填充的.

#include <iostream>
#include <time.h>
#define XMAX 500
#define YMAX 400
#define ZMAX 300

int main()
{
    srand(0);   
    register double sum = 0;
    register int i;
    register int j;
    register int k;

    double *arr_ptr;
    arr_ptr = new double[XMAX*YMAX*ZMAX];

    for (i=0; i<XMAX*YMAX*ZMAX; ++i)
    {
        *(arr_ptr+i) = rand()/double(RAND_MAX);
    }

    clock_t start, finish;
    start = clock();

    for (i=0; i<XMAX; ++i)
    {
        for (j=0; j<YMAX; ++j)
        {
            for (k=0; k<ZMAX; ++k)
            {
                sum += *(arr_ptr+i*YMAX*ZMAX+j*ZMAX+k);
            }
        }
    }

    finish = …
Run Code Online (Sandbox Code Playgroud)

c c++

3
推荐指数
1
解决办法
3117
查看次数

填充char**

我正在尝试从另一个文件中读取文件列表.文件读取有效但填充char*数组不是.它适用于第一次迭代,但随后在下一行得到一个错误的指针.我尝试使用字符串向量但遇到问题,我认为由于它的析构函数试图释放argv.

char **datafiles = (char**)malloc(0);
int filecount = 0;

master.AddDataFiles(argv[1],datafiles,filecount);

int Manager::AddDataFiles(char *filename, char **filelist, int &filecount)
{
    const int LINEMAX = 64;
    struct stat info;
    std::ifstream is(filename);
    if (is.fail()) return 1;

    char buffer[LINEMAX];

    while(!is.eof())
    {
        is.getline(buffer,LINEMAX);
        realloc(filelist,sizeof(char**) * (filecount + 1));
        filelist[filecount] = (char*) malloc(std::strlen(buffer) + 1);
        std::strcpy(filelist[filecount],buffer);
        filecount++;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++

1
推荐指数
1
解决办法
324
查看次数

保持递归计数

我正在尝试计算递归排列函数中的调用次数.

我编写了一个用所有排列填充队列的函数,但我似乎无法弄清楚如何保持准确的计数.

最终我希望函数返回lbound和ubound参数指定的permuatations的子集,并且这样做我认为我需要保留一个内部计数.

使用返回队列的大小将不起作用,因为我希望该函数能够处理太大而无法保存在内存中的排列.

对于此代码,我希望将计数返回为100.

#include <vector>
#include <iostream>;

using namespace std;

int& Permutations(vector<vector<int>> param, vector<vector<int>> &perm, int index=0)
{
    static vector<int> iter;
    static int count = 0;

    if (index == param.size())
    {
        perm.push_back(iter);   // add permutation to queue
        count++;
        return count;
    }

    for (int i=param[index][0]; i<=param[index][1]; i+=param[index][2])
    {
        if (iter.size() > index) iter[index] = i;
        else iter.push_back(i);
        Permutations(param, perm, index+1); // recursive function
    }
}

void main()
{
    vector<vector<int>> params; // vector of parameter vectors

    vector<int> param1, param2;

    int …
Run Code Online (Sandbox Code Playgroud)

c++ recursion permutation

0
推荐指数
1
解决办法
4324
查看次数

标签 统计

r ×4

c++ ×3

batch-file ×1

c ×1

cmd ×1

machine-learning ×1

permutation ×1

recursion ×1

regex ×1

windows ×1