我尝试使用函数创建一个包含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;列名仍然在函数外部保持不变。我很感激任何帮助使这项工作。
谢谢!
答案 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”
我很确定这不是有效的方法。我很想知道是否有更简单的解决方案。