r - 部分基于全局变量返回数据集的函数
问题描述
我想创建一个执行以下操作的函数: 接收数据集 检查全局变量 x 是否为 0 或 1 如果 x 为 0,那么它应该将 x 变为 1 并返回没有第一行的数据集 如果 x 为 1那么它应该离开 x 并返回每一行。
数据集是
mid counts
1 -2.25 3
2 -1.75 6
3 -1.25 14
4 -0.75 14
5 -0.25 17
6 0.25 19
7 0.75 12
8 1.25 9
9 1.75 4
10 2.25 2
11 2.25 -3
12 2.75 -6
13 3.25 -14
14 3.75 -14
15 4.25 -17
16 4.75 -19
17 5.25 -12
18 5.75 -9
19 6.25 -4
20 6.75 -2
我现在拥有的功能
testfunc = function(set){
print(x)
for(i in 1:nrow(set)){
ifelse(x == 0, x <<- 1, return(set[i]))
}
}
这给出了 x 的打印结果,并且仅给出了数据集的计数行,而第一行没有被遗漏。
解决方案
您的功能逻辑有点错误。
首先,你根本不需要for
循环。
其次,您不需要ifelse
只测试一个值。length(x) == 1
所以你将测试一个值,x
这应该用一个普通的if
.
看看这ifelse
是在做什么:
ifelse(x == 0, x <<- 1, return(set[i]))
这读作“如果x
为零,则在else 返回中设置x
为 1 ”GlobalEnv
set[i]
。这显然不是你想要的。
正确的方法可能如下。
testfunc <- function(set){
print(x)
if(x == 0){
x <<- 1
return(set[-1, ])
}else{
return(set)
}
}
现在测试它,首先使用x == 0
.
x <- 0
res <- testfunc(dat)
x
#[1] 1
head(res)
# mid counts
#2 -1.75 6
#3 -1.25 14
#4 -0.75 14
#5 -0.25 17
#6 0.25 19
#7 0.75 12
全局环境中的值发生x
了变化,返回的数据框没有第一行。
现在x == 1
。
res <- testfunc(dat)
x
#[1] 1
head(res)
# mid counts
#1 -2.25 3
#2 -1.75 6
#3 -1.25 14
#4 -0.75 14
#5 -0.25 17
#6 0.25 19
的值x
没有改变,返回的 df 是原始的。
推荐阅读
- c++ - 无法通过 int 在 char [size] 上设置大小
- javascript - 单独倒计时
- prolog - 如何在运行时在 Jason 中添加规则
- python - 如何让熊猫从网站中用户的给定链接读取数据库?
- python - 在 python 中调整 DICOM 图像的大小
- spring - 如何在打包为战争的 Spring Boot 应用程序中加载其他属性文件?
- time-complexity - BFS 糟糕的复杂性
- python - 如何让 Tkinter 运行可执行文件?
- c# - 当值太大时,C# 代码返回方法外
- r - 使用 R Mongolite 连接到 Amazon DocumentDB