【问题标题】:R code does not work when called from function从函数调用时,R 代码不起作用
【发布时间】:2017-04-11 17:24:51
【问题描述】:

您好,我刚开始学习 R 并发现这个问题非常有趣,我只是直接运行代码而不包装在函数中它可以工作,但是当我将它放在函数中时它不起作用,可能是什么原因?

fill_column<-function(colName){

count <- 0

for(i in fg_data$particulars) {
count <- count +1

if(grepl(colName, i) && fg_data$value[count] > 0.0){
  fg_data[,colName][count] <- as.numeric(fg_data$value[count])

} else {
  fg_data[,colName][count] <- 'NA'
  }
 }
}

fill_column('volume')

我正在创建名为 volume 的新列,该字符串存在于特定列中。

我添加了一条评论,其中另一个问题给出的解决方案对我不起作用,请看我下面的评论。

【问题讨论】:

标签: r function data-manipulation


【解决方案1】:

最后我得到了它,但在SO 上阅读了另一个答案,这是解决方案:

fill_column <- function(colName){

  count <- 0

 for(i in fg_data$particulars) {
   count <- count +1

    if(grepl(colName, i) && fg_data$value[count] > 0.0){
     fg_data[,colName][count] <- as.numeric(fg_data$value[count])

    } else {
      fg_data[,colName][count] <- 'NA'
   }
 }
 return(fg_data)
}

fg_data = fill_column('volume')

现在原因,通常在任何语言中,当我们在任何函数内修改全局对象时,它会立即反映在全局对象上,但在 R 中,我们必须从函数返回修改后的对象,然后再次将其分配给全局对象以查看我们的更改。或者另一种方法是使用 envir=.GlobalEnv 将函数内的本地对象分配给全局上下文。

【讨论】:

  • 现在越来越有趣了。当我现在执行代码时,它会在 [.data.frame(*tmp*, , colName) 中报告错误:未定义的列已选择调用自:[.data.frame(*tmp*, , colName) 尽管之前它工作正常。其他人遇到过这个问题吗?
猜你喜欢
  • 2013-09-03
  • 2018-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多