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

无法在R中的嵌套函数内使用变量,r,function,plyr,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 Pri

我一直在写一个函数,它必须找到唯一的值 基于两列进行分组后,从特定列中删除

假设我有下面的示例数据

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
> 
我想计算唯一“年龄”值的数量,所以我写了一个 函数进行分组,并使用ddply查找my中的唯一值 功能。。 像这样的,

  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)
但是当我们硬编码函数中的值时,它是有效的 完全

你能帮我把变量传递到 函数作为参数。谢谢你的时间。

列宁

以下代码适用于我:

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")

U您需要引用您的文件名
U(“成人数据集.csv”、“工人阶级”、“性别”、“年龄”)
,否则它会认为您正在向它传递一个名为
成人数据集.csv
的变量中存储的值,而它找不到该值。在您的函数定义中,您已经硬编码了这个文件名,所以我不确定您为什么要传递文件名。Andrew是正确的。您可能还发现split函数作为base-r/non-dplr替代方案非常有用:
sapply(split(文件名、列表(文件名$workclass、文件名$sex))、函数(x)长度(唯一(x$age)))
@Florian。。非常感谢您的时间,并为在Fn定义中硬编码文件表示歉意。现在我对硬编码进行了评论,并在参数中引用了文件名。现在错误是“文件名[[W]]中的错误:下标超出范围”。我在谷歌上搜索了一下,但没有任何见解。如果可能的话,请帮我解决这个问题。再次感谢您的时间。@Evan Friedland。。谢谢你的建议。我不想硬编码函数中的值,因此我将参数读取为Out1到Out3,并将其用作“sappy(split(File_name,list(Out1,Out2)),function(x)length(unique(Out3))”。但与“下标超出范围”相同的错误。甚至直接尝试为“sapply(文件名、列表(文件名[[W]],文件名[[S]]))、函数(x)长度(唯一(文件名[[A]]))”。对R来说非常陌生,无法准确理解错误。谢谢你抽出时间。非常感谢@Evan。。非常感谢……干杯。