将循环结果加载到容器中

时间:2018-09-28 13:43:30

标签: r for-loop containers least-squares beta

以下所有内容均在R中进行。

我试图将for循环结果的结果存储在不同的容器中,但是不知何故,我一直以NA警告告终,并且结果 not 未存储在我的容器中。甚至为函数中的不同for循环尝试了不同的容器,然后尝试了用于容器的矩阵,但似乎不起作用。

已经尝试了整整两天的不同解决方案,而且似乎应该有一个如此简单的解决方案。也许我自己再也看不到了...

int n = int.Parse(txt_input.Text);

var sb = new StringBuilder();
for (int j = 0; j < n; j++)
{
    sb.Append('X');
}
sb.AppendLine();
for (int i = 0; i < n - 2; i++)
{
    sb.Append('X');
    for (int j = 0; j < n - 2; j++)
    {
        sb.Append(' ');
    }
    sb.Append('X');
    sb.AppendLine();
}
for (int j = 0; j < n; j++)
{
    sb.Append('X');
}

lbl_output.Text = sb.ToString();

1 个答案:

答案 0 :(得分:0)

似乎您在使用R中的函数时遇到了一些麻烦。在R中,函数具有自己的环境(即,它们自己的对象集)。即使他们可以从其父环境(所有对象的集合)中读取,也无法在其上进行写操作。让我用一个简单的代码演示一下。

teste2=matrix(,2,2)
teste=function(a,b) {teste2[,1]=c(a,b)}
teste(3,2)
teste2
    [,1] [,2]
[1,]   NA   NA
[2,]   NA   NA

如您所见,teste(函数)无法更改teste2(矩阵)。

在R中,创建函数的最佳方法是将所需的所有对象作为参数提供给它,并在函数主体的末尾给出单个return()函数,该函数给出最终对象。 / p>

您所做的事情差不多,但是使用了多个return()函数。 R仅使用第一个return(),而忽略其余的。见下文:

teste=function(a,b) {c=a;return(c);d=b;return(d)}
teste(3,2)
[1] 3

对于您的特定代码,我建议排除所有result.container <-,并仅在最后一个(列表)末尾放置return()