如何使用函数中传递的参数动态命名R函数内的数据集?

时间:2015-07-01 11:57:31

标签: r

我尝试使用函数创建一个包含0行的四个变量数据帧。我有两个要求。

1)新创建的数据框的名称应该是传递的参数 2)数据框中第二个变量的名称应该是传递的参数

我尝试使用以下代码执行此操作:

sim<-function(df,df1){

y<-df1

assign(paste(y),data.frame(Var1=numeric(), Var2=numeric(), Var3=numeric(),
                             Var4=numeric()),envir=.GlobalEnv)

colnames(df)[2]<-paste(y)

return(names(df))
}

sim(test,"test")  

colnames(test)

我得到以下输出:

  

SIM(测试&#34;测试&#34)

     

[1]&#34; Var1&#34; &#34;测试&#34; &#34; VAR3&#34; &#34; VAR4&#34;

     

colnames(测试)

     

[1]&#34; Var1&#34; &#34; VAR2&#34; &#34; VAR3&#34; &#34; VAR4&#34;

我不明白的是,当R能够理解&#39;测试&#39;列名被修改,并在运行期间返回修改后的名称,数据帧&#39;测试&#39;列名仍然在函数外部保持不变。我很感激任何帮助使这项工作。

谢谢!

1 个答案:

答案 0 :(得分:0)

我只想到了什么。函数没有改变'test'的名字的原因是R不能改变函数内的全局数据帧,除非该改变也是全局的。

因此我能想到的唯一解决方法是使用assign函数将修改分配给全局数据框'test'我除了覆盖'test' < / p>

<script>
    var forms = document.getElementsByTagName('form');
    for (var i = 0; i < forms.length; i++) {
        forms[i].noValidate = true;
        forms[i].addEventListener('submit', function(event) {
            if (!event.target.checkValidity()) {
                event.preventDefault();
                alert("Please complete all fields and accept the terms.");
            }
        }, false);
    }
</script>

结果如下:

  

SIM(测试, “测试”)

     

colnames(测试)

     

[1]“Var1”“test”“Var3”“Var4”

我很确定这不是有效的方法。我很想知道是否有更简单的解决方案。