我试图在函数中获取全局环境中的参数名称.我知道我可以使用替换来获取命名参数的名称,但我希望能够用...参数做同样的事情.我有点让它为...的第一个元素工作,但无法弄清楚如何为其余的元素做这件事.知道如何让它按预期工作.
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) 我正在尝试从批处理文件中运行多个后台进程,并将输出定向到文件.是否可以在Windows中执行此操作?这是我尝试过的,但最终导致启动程序的输出而不是后台进程.
start myapp.exe > myapp.out 2>&1
Run Code Online (Sandbox Code Playgroud) 我怎样才能替换..
我尝试过类似的东西:
names(dataset) <- gsub("[/./.]",".",names(dataset))
Run Code Online (Sandbox Code Playgroud)
但它并不像我希望的那样有效.
我正在尝试在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中的内存使用情况来触发事件的好方法是什么.假设我将一堆文件合并到一个主文件中,但整个主文件的大小可能太大而无法保存在内存中.当我接近内存限制时,我想保存当前的主文件和空闲内存.
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) 我想知道在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) 我正在尝试从另一个文件中读取文件列表.文件读取有效但填充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) 我正在尝试计算递归排列函数中的调用次数.
我编写了一个用所有排列填充队列的函数,但我似乎无法弄清楚如何保持准确的计数.
最终我希望函数返回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)