无法在R中的嵌套函数内使用变量

时间:2017-07-24 13:15:57

标签: r function plyr

我一直在编写一个必须找到唯一值的函数 在基于几列的分组后从特定列开始。

假设我有以下示例数据

head(Adult_data[,c(2,10,1)],20)
               workclass     sex age
    1          State-gov    Male  39
    2   Self-emp-not-inc    Male  50
    3            Private    Male  38
    4            Private    Male  53
    5            Private  Female  28
    6            Private  Female  37
    7            Private  Female  49
    8   Self-emp-not-inc    Male  52
    9            Private  Female  31
    10           Private    Male  42
    11           Private    Male  37
    12         State-gov    Male  30
    13           Private  Female  23
    14           Private    Male  32
    15           Private    Male  40
    16           Private    Male  34
    17  Self-emp-not-inc    Male  25
    18           Private    Male  32
    19           Private    Male  38
    20  Self-emp-not-inc  Female  43
> 

我想计算UNIQUE“Age”值的数量,所以我写了一个 函数分组并使用ddply来查找我内部的唯一值 功能.. 像这样的东西,

  U=function(File_name,W,S,A) {
  File_name=read.csv("Adult_data_Set.csv")

  Out1=File_name[[W]]
  Out2=File_name[[S]]
  Out3=File_name[[A]]

  library(plyr); library(dplyr)
A=ddply(File_name,~File_name[[W]]+File_name[[S]],summarize,new=length(unique(File_name[[A]])))
  print(A)


}

U(Adult_data_Set.csv,"workclass","sex","age")

如下所示抛出错误

U(Adult_data_Set.csv,"workclass","sex","age")

Error in eval(expr, envir, enclos) : object 'File_name' not found

我甚至在函数内部尝试了这样而不是ddply但是 没有给出预期的结果

library(dplyr)
UNQ=as.data.frame(File_name %>%
  group_by(File_name[[W]],File_name[[S]]) %>%
  summarise(n_distinct(File_name[[A]])))

print(UNQ)

但是当我们对函数中的值进行硬编码时,它正在工作 完美..

你能帮我解决一下如何将变量传递给一个 作为参数。谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

列宁,

以下代码对我有用:

U <- function(File_name, W, S, A){
  File <- read.csv(File_name, header = TRUE)
  Out1 <- File[[W]]
  Out2 <- File[[S]]
  Out3 <- File[[A]]
  sapply(split(File, list(Out1, Out2)), function(x) length(unique(x[[A]])))
}
U("testing.csv", "workclass", "sex", "age")

要注意的一些事情。我不会调用File数据与字符串File_name相同的对象。我也不使用Out3包含age函数中原始对象的sapply数据列。我们只想使用字符串A对我们的拆分列表进行子集化,这是&#34; age&#34;。这对你有帮助吗?