【发布时间】:2015-02-03 16:50:24
【问题描述】:
我有一个看起来像这样的 R 代码:
StatFunction <- function(CSVImport, AnimalID_i,Treatment_i){
#Data Input from a CSV file (example below)
Data <- read.csv(CSVImport)
到目前为止一切顺利,因为数据是从 csv 文件中读取的。我这样调用函数
StatFunction (path/to/file/, "Animal", "Treatment")
请注意,输入参数是表示 CSV 列名的字符串。现在,我尝试这样整理数据框:
#Trying to sort out the input
Data <- within(Data, {
FinalID <- (factor(as.character(FinalID_i)))
AnimalID <- (factor(as.character(AnimalID_i)))
这不适用于 StatFunction 的参数。它给了我这个
[1] "---Final ID---"
[1] Treatment
Levels: Treatment
[1] "---Animal ID---"
[1] Animal
Levels: Animal
什么时候,直接把参数代入代码中,像这样
FinalID <- (factor(Treatment))
AnimalID <- (factor(Animal))
它给了我预期的结果。
[1] "---Final ID---"
[1] 0 0 1 1 1
Levels: 0 1
[1] "---Animal ID---"
[1] 722 723 724 727 728
Levels: 722 723 724 727 728
所以我的问题是如何在传递参数而不是在代码中烧掉名称时使其工作?
【问题讨论】:
-
with和within用于交互使用,而不是编程内部函数。 -
另外,把它分解成一个最小的例子。您的输入参数是否来自 Shiny 应用程序并不重要,让函数与
StatFunction("filename", "appropiate_animal_id", "some_final_id")一起工作,并给我们一个示例来说明这些参数实际上可能是什么。 -
谢谢。简化了帖子。现在更有意义了吗?
-
@Gregor,您能否指出我的参考资料或说明为什么
with和within用于交互使用而不是编程?没有类似于?subset中的警告或帮助文件中的其他指示,所以我认为不会有问题。 -
@docendodiscimus 我可能在上面夸大了它,但我认为公平地说,在程序设置中应谨慎使用非标准评估的任何内容。 With/within 确实出现in this answer。使用
with的函数在大多数情况下可能会很好,但是内部使用with的函数的包不会通过R CMD CHECK——它至少会警告“全局变量没有可视绑定”。
标签: r