r - 在 R 中调试返回 NA 的函数
问题描述
我正在尝试编写一个函数,它从给定目录中的不同文件中读取一些污染数据,每个文件对应于监视器的记录,并返回作为函数输入参数给出的污染物之一的平均值。
数据如下所示:
pollutantmean <- function(directory, pollutant, ID){
pmean <- 0
for (monitor in ID){
filename <- paste("./W2/", directory,"/", monitor,'.csv', sep = "")
print(filename)
pollution <- read.csv(file = filename, header = TRUE, sep = ",")
class(pollution)
head(pollution, n = 3)
pmean <- pmean + mean(pollution$pollutant, na.rm = TRUE)
}
return(pmean)
}
要运行我设置的功能:
pollutantmean("specdata", "sulfate", 110:112)
我收到以下输出和错误消息:
[1] "./W2/specdata/110.csv"
[1] NA
Warning message:
In mean.default(pollution$pollutant, na.rm = TRUE) :
argument is not numeric or logical: returning NA
我的问题是:
- 如何逐行运行代码,以便查看函数中局部变量的值如何变化?我查了 Youtube,但找不到相关的视频。
- 当我在控制台中复制粘贴并运行函数中的每一行代码时,我看到数据已正确存储在污染 data.frame 中。为什么我在控制台中看不到作为输出打印的类和 data.frame 的头部?相反,我只得到与 pmean 相关的 NA 我猜......
- 如何修复与此错误消息相关的错误?
解决方案
好问题。如果您使用的是 RStudio,您可以使用该browser()
命令将程序冻结在某个位置,以便查看环境。
请注意,每次您点击它都会停止,browser()
因此您可能需要在运行之前放置一个 if 语句来检测警告。完成后不要忘记删除该语句。
pollutantmean <- function(directory, pollutant, ID){
pmean <- 0
for (monitor in ID){
filename <- paste("./W2/", directory,"/", monitor,'.csv', sep = "")
print(filename)
pollution <- read.csv(file = filename, header = TRUE, sep = ",")
class(pollution)
head(pollution, n = 3)
pmean <- pmean + mean(pollution$pollutant, na.rm = TRUE)
# Stop here and view the current environment
browser()
}
return(pmean)
}
推荐阅读
- ruby-on-rails - 让 RVM 读取 rbenv 文件
- mongodb - 使用 $and、$or 的 Mongo 数组查询
- reactjs - PropTypes 导致表单刷新 onSubmit redux-form
- openstack - openstack 计算服务列表 --service nova-compute 安装 nova 后返回空行
- azure - 即使使用 sudo,Yeoman 也会给出权限错误
- java - 写入内部存储
- multi-tenant - TenantAccessor.getCurrentTenant() 抛出 TenantNotAvailableException:无法获取当前租户:没有可用的请求
- php - 调用 dispatch 时 Lumen 内存不足
- server - 如何在谷歌云上找到私有IP地址?
- laravel - Eloquent 方法在子类中调用时使用子类而不是父类