【问题标题】:Use a variable with a created name in a function在函数中使用具有创建名称的变量
【发布时间】:2014-01-16 10:26:02
【问题描述】:

我不知道我尝试做的是否可行!我有一个值矩阵(Var_sim),并将其转换为 ff 对象。该对象的名称是用“粘贴”创建的。现在我想在函数 ffload 中使用这个对象,这是我的代码:

Variables[k] = TEMP
Cell_number[i] = 4095
selected_domains = 1

assign(paste("Mat_",Variables[k],"_",Cell_number[i],"_",selected_domains[j],sep=""),as.ff(Var_sim))

在这里,我将变量 Mat_TEMP_4085_1 作为 ff 对象。我在一个循环中使用它,所以我将拥有各种名称(不同的 cell_number)的各种 ff 对象。我需要在函数中使用 Mat_TEMP_4085_1 (和其他),但我不能只写名称:

ffsave(as.name(paste("Mat_",Variables[k],"_",Cell_number[i],"_",selected_domains[j],sep="")), file="Test")

我有以下错误:

Error in ffsave(as.name(paste("Mat_", Variables[k], "_", Cell_number[i],  : 
objet ‘as.name(paste("Mat_", Variables[k], "_", Cell_number[i], "_",     selected_domains[j], sep = ""))’ not found

它无法识别变量。我该怎么办?

【问题讨论】:

  • 这些“ff”是什么东西?从一个包裹?此外,命名和使用分配几乎总是错误的,并且很可能是您的问题的原因。制作事物的列表,而不是尝试将索引放入事物的名称中。
  • 是的 ff 是一个包,我使用它是因为我正在处理大数据。该函数会将每个 ff 文件写入一个文件夹中,然后我可以重新加载它们并逐个使用一个矩阵。问题是当我加载一个ff对象时,变量名是保存在ffsave中的对象的名称。如果我总是输入相同的名称并且我想加载几个 ff 对象,则该变量将被覆盖,因为它将是相同的名称。
  • 您可以使用envir 参数将每一个加载到不同的环境中并从中列出。

标签: r function filenames assign ffbase


【解决方案1】:

看起来您使用的不是as.name 对。只需将其删除或将as.character 包裹在其周围,如果您想从变量的字符串名称中获取变量值,请使用get; @Spacedman 是对的,如果可以的话,你应该更喜欢名单。

tt = "rbind"
print(do.call(tt,list(LETTERS))) # works
print(do.call(as.name(tt),list(LETTERS))) # does not work
print(do.call(as.character(as.name(tt)),list(LETTERS))) # works
print(do.call(get("tt"),list(LETTERS))) # works

【讨论】:

  • 感谢您的回答。无论我尝试什么,我仍然有同样的错误(get, as.character(as.name()) 或 juste paste())。当我只是打印代码时,它给了我想要的名称,但是当我需要在函数中使用它时,它无法识别它
  • 我查看了 ffsave,看来您需要指定名称列表:require(ff); n <- 8e3; assign( paste(LETTERS[1:3],collapse=""), ff(sample(n, n, TRUE), vmode="integer", length=n, filename="~/test/ABC.ff") );ffsave(list=paste(LETTERS[1:3],collapse=""),file="~/test/another_ABC")
  • 谢谢,它有效!我需要“列表”。名称由用户在函数中输入的参数设置。我可以从不同的参数组合中获得近 500 000 个名称 - 我认为使用名称列表更复杂
猜你喜欢
  • 2022-01-16
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
相关资源
最近更新 更多