r - 为什么 rbind 在用户定义的函数中不起作用?
问题描述
我正在尝试将行附加到用户定义函数内的数据框。我之前在 for 循环中毫无困难地做到了这一点,如下所示:
t1 <- data.frame(a=character(),
b=numeric())
for(i in 1:2){
tmp.df <- data.frame(a="apple", b=i)
t1 <- rbind(t1,tmp.df)
}
我得到一个包含两个观察结果的数据框。
但是当我尝试在函数中做类似的事情时,它不起作用。我已经尝试调试该函数,并且在 rbind 步骤它似乎只是退出该函数而不执行该步骤。所以下面的代码以原始的空数据框结束。
t1 <- data.frame(a=character(),
b=numeric())
create.rows <- function(id, it){
if(it==1){
tmp.df <- data.frame(a=id, b=it)
t1 <- rbind(t1,tmp.df)
}else{
tmp.df <- data.frame(a=id, b=99)
t1 <- rbind(t1,tmp.df)
}
}
为什么会发生这种情况,我能做些什么来解决它?
请注意,我事先不知道数据框中将有多少行,因此我无法直接写入特定行。
解决方案
在函数中,需要指定<<-
赋值运算符的形式,以使 R 搜索父环境以找到赋值运算符左侧的对象并为其分配一个新值。
t1 <- data.frame(a=character(),
b=numeric())
create.rows <- function(id, it){
if(it==1){
tmp.df <- data.frame(a=id, b=it)
t1 <<- rbind(t1,tmp.df)
}else{
tmp.df <- data.frame(a=id, b=99)
t1 <<- rbind(t1,tmp.df)
}
}
create.rows(1,1)
create.rows(1,2)
t1
...和输出:
> t1
a b
1 1 1
2 1 99
有关赋值运算符 ( 和 ) 的三种形式的行为的更多详细信息=
,<-
请<<-
查看赋值运算符的帮助页面,其中相关部分显示:
运算符 <<- 和 ->> 通常只在函数中使用,并导致通过父环境搜索被分配变量的现有定义。如果找到这样的变量(并且其绑定未锁定),则重新定义其值,否则在全局环境中进行赋值。
推荐阅读
- django - Django 按不同列的顺序不同
- python - 在python中的离散分布之间进行选择
- java - 更改展示视图上的文本大小
- flutter - Dart API:如何发送多个查询参数
- macos - jupyter-lab的终端模式和原生终端有什么区别
- python - 在 Pandas 中找到最接近的值
- node.js - 如何使用 nodejs 服务监控网站和下载数据?
- facebook - 将新页面 ID 与沙盒广告帐户相关联
- javascript - 有没有办法将配置参数传递给 Outlook 插件
- permissions - 为什么我无法更改 SonarQube roslyn 问题的状态?