【问题标题】:R - Assigning "NA" to objects 'not found' inside a function; is it possible?R - 将“NA”分配给函数内“未找到”的对象;可能吗?
【发布时间】:2015-04-25 06:19:18
【问题描述】:

我正在通过 R 中的几个不同函数运行一个数据集(在示例中为“数据对象”),并在最后连接数字结果。见:

a<-median((function1(x=1,dataobject,reps=500)),na.rm=TRUE)
b<-median((function2(x=1,dataobject,reps=500)),na.rm=TRUE)
c<-median((function3(x=1,dataobject,reps=500)),na.rm=TRUE)

d<-median((function4(x=1,dataobject,reps=500)),na.rm=TRUE)
e<-median((function5(x=1,dataobject,reps=500)),na.rm=TRUE)
f<-median((function6(x=1,dataobject,reps=500)),na.rm=TRUE)

c(a,b,c,d,e,f)

但是,某些函数无法使用我正在使用的数据集运行,因此它们会返回错误;例如“function3”无法运行,因此当它进入连接步骤时,它会给出“错误:找不到对象'e'”并且不返回任何内容。有没有办法在连接步骤告诉 R 将值“NA”分配给未找到的对象并继续运行其余代码而不是停止?这样回报就会是

[1] 99.233 75.435 77.782 92.013 NA 97.558 

一个简单的问题,但我找不到任何其他被问到的实例。我最初试图设置一个函数来运行所有内容并输出连接的结果,但遇到了同样的问题(当一个函数无法运行时,整个包装函数也停止了,我不知道如何告诉 R跳过它无法计算的东西)。

非常感谢任何想法!谢谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    我能想到的几个解决方案,

    1. 初始化您计划使用的所有变量,以便它们具有您想要的默认值。

      a = b = c = d = e = NA

    然后运行您的代码。如果弹出错误,您的变量中将有 NA。

    1. 使用“tryCatch”。如果您不知道这是什么,我建议您阅读it。它可以让您处理错误。

    这是您代码中的一个示例,

    tryCatch({
      a<-median((function1(x=1,dataobject,reps=500)),na.rm=TRUE)
    },
    error = function(err){
      print("Error in evaluating a. Initializing it to NA")
      a <<- NA
    })
    

    【讨论】:

    • 这太棒了!初始化变量的简单修复,使用 tryCatch 允许我将所有内容放在一个函数中并运行它。感谢您向我介绍 tryCatch,非常感谢您的帮助!我想投票,但我没有足够的声誉。当我这样做时,我会回来偿还我的债务!
    • @Fishy 如果对您有用,请接受答案。 (答案旁边的勾号)
    猜你喜欢
    • 1970-01-01
    • 2020-08-21
    • 2016-07-17
    • 1970-01-01
    • 2020-11-26
    • 2011-09-22
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    相关资源
    最近更新 更多