将参数传递给R中的factor()

时间:2015-02-03 16:50:24

标签: r

我有一个看起来像这样的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

所以我的问题是如何在传递参数而不在代码中刻录名称时使其工作?

2 个答案:

答案 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()