微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ifelse和append在函数中不起作用

如何解决ifelse和append在函数中不起作用

我想将文件名分布在两个不同的向量中。如果存在,则应转到existing_files,否则,应转到missing_files。

existing_files <- ""
missing_files <- ""

f1 <- function(file_name){
  if (any(file_name == vector_of_file_names)) {
    existing_files <- append(existing_files,file_name)
  } else {
    missing_files <- append(missing_files,file_name)
  }
}

f1("file1")

执行“ file1”不起作用,我没有收到任何警告或错误。这是为什么?如果我在函数删除“ existing_files

有关我要在此处解决的问题的更多信息:

我正在扫描我正在使用的文件夹中的文件名,该文件名已存储在“ vector_of_file_names”中。我只是想知道,是否我需要的所有文件都在该文件夹中。我用list.files做到这一点,这给了我所有文件。然后,我将这些文件与“ vector_of_file_names”进行比较。结果就是我的问题。我想要两个向量来根据文件在该文件夹中的存在列出文件(我想要在该文件夹中)。

解决方法

existing_filesmissing_files在全局范围内。没有超级分配<<-

,就无法在您的功能范围内更改它们
existing_files <- ""
missing_files <- ""

f1 <- function(file_name){
  if (any(file_name == existing_files)) {
    existing_files <<- append(existing_files,file_name)
  } else {
    missing _files <<- append(missing_files,file_name)
  }
}

f1("file1")
,

您能否提供更多有关要解决的问题的背景信息?我在您的代码中看不到任何实际测试文件“存在”的东西,只有向量existing_files的状态。

让功能一次作用于单个对象然后根据结果潜在地修改多个外部对象之一的状态是不寻常的设计选择。是的,您可以使用超方法之外的方法(在其他作用域中的对象被修改为函数的副作用)“解决”您的问题,但是您的代码将很快变得难以推理。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。