【问题标题】:Function parameters - replace by reference函数参数 - 引用替换
【发布时间】:2017-05-24 11:44:16
【问题描述】:

感谢您的所有建议。我剩下的问题是: 我可以在以下语句中替换列名“硫酸盐”吗... 数据清洁

【问题讨论】:

  • 第三行试试datanas <- is.na(datatable[,pollutant])
  • 你是什么意思试图检索参数值?
  • 你需要使用字符串。将您的函数参数定义为字符串(在“”中),然后直接在setwd() 中使用该字符串,并在数据表中使用datatable[, pollutant]
  • 您的datatable 是从哪里获得的?你必须阅读它,例如使用read.table(...)(或类似功能),或者您必须从 RData 文件中加载它。类似问题(至少参数相同):stackoverflow.com/questions/29018579/…

标签: r


【解决方案1】:

当您将值附加到参数时,它们会显示为您工作区中的对象。但是环境不是工作空间而是函数的环境。

所以在你的情况下,directory 将是一个字符串,它会起作用。首次。您的工作目录现在已更改,您需要恢复到前一个目录才能使该功能再次工作。这可能会变得非常混乱,所以我喜欢做的只是通过完整路径引用原始文件。请参阅?list.files 了解更多信息。

对于你的第二个问题,你最好的办法是引用变量内的某个级别,就是这样做

x[, pollutant]

在此处添加drop = FALSE 参数很方便,以保留我假设的data.frame。

您还可以通过实现datatable 参数来改进您的功能。这样你就可以很好地将所有对象捆绑在一起。

这里要注意的最重要的事情是“调试”。你至少应该学会使用browser()。这个函数将在调用它的那一步停止你的函数的执行。这使您能够在 R 控制台中检查函数中的元素并运行代码以查看发生了什么。通过这种方式,您可以加快代码的开发速度,至少在您通常还没有内化所有数据结构和范式的初期是这样。

【讨论】:

  • 感谢 Leo P - 你是对的,我只是省略了在函数调用中包含引号。对不起!
  • 还有 Jogo - 感谢您的链接 - 这确实是同一个问题,但已经通过使用 If 语句解决了,该语句之所以有效,是因为变量污染物只有两种可能性。但是,我不敢相信没有更通用的解决方案。本质上,我只需要通过引用参数污染物来替换所有硝酸盐实例。可能吗? - 我会用完整的代码更新帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
相关资源
最近更新 更多