我有一个看起来像这样的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
所以我的问题是如何在传递参数而不在代码中刻录名称时使其工作?
答案 0 :(得分:1)
您不能只交换字符和符号值。如果要使用字符值提取数据,请使用
Data$FinalID <- factor(as.character(Data[[FinalID_i]]))
Data$AnimalID <- factor(as.character(Data[[AnimalID_i]]))
答案 1 :(得分:0)
为什么不返回一步,通过添加传递给colClasses
的{{1}}参数,通过名称添加因子列的事实。或者您可以添加read.csv()
并执行相同的操作。 , ...)
可以发送到...
参数列表。
read.csv()
并像这样致电statFunction <- function(file, colClasses = character(), ...) {
read.csv(file, colClasses = colClasses, ...)
}
statFunction()