【问题标题】:Select (dplyr) throws object error in user-defined function calls?Select (dplyr) 在用户定义的函数调用中抛出对象错误?
【发布时间】:2020-10-28 15:50:29
【问题描述】:

我正在尝试定义一个函数,该函数可用于对整个数据集的多个部分进行统计测试,而无需手动输入多行相同的代码。

我原来的函数是这样的;

#Mann-Whitney test for non-normal continuous variables
MW_fn = function (var) {
wilcox.test(x = df %>% filter(Diagnosis == "Control") %>% select(var) %>% pull(), y = df %>% filter(Diagnosis == "Schizophrenia") %>% select(var) %>% pull())}

但是当我运行它时它会抛出一个“找不到对象”的错误。

当我使用一个变量(cesdhs)在用户定义的函数之外运行代码时,它运行良好并给出下面的结果,看起来不错..

wilcox.test(x = df %>% filter(Diagnosis == "Control") %>% select(cesdhs) %>% pull(), y = df %>% filter(Diagnosis == "Schizophrenia") %>% select(cesdhs) %>% pull())

具有连续性校正的 Wilcoxon 秩和检验

数据:df %>% filter(Diagnosis == "Control") %>% select(cesdhs) %>% pull() and df %>% filter(Diagnosis == "Schizophrenia") %>% select( cesdhs) %>% 拉取() W = 6356.5,p 值 = 9.003e-09 备择假设:真实位置偏移不等于0

测试一些不同的东西似乎可以归结为:

test_fn = function (var) {
df %>% select(var) 
}

即使变量存在于数据框中也会引发错误。

有什么想法吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    我使用iris-dataset 尝试了您的功能。 只要var 用引号定义,您的函数就可以正常工作。

    函数有问题的部分:

    test_fn = function(var) {
      iris %>% select(var) 
    }
    
    test_fn("Species")
    
    
    > test_fn("Species")
           Species
    1       setosa
    2       setosa
    3       setosa
    4       setosa
    5       setosa
    ...
    

    全功能:

    MW_fn = function (var) {
      wilcox.test(x = iris %>% filter(Species == "versicolor") %>% select(var) %>% pull(), 
                  y = iris %>% filter(Species == "virginica") %>% select(var) %>% pull())
    }
    
    MW_fn("Sepal.Length")
    
    
    
    >   Wilcoxon rank sum test with continuity correction
    
    data:  iris %>% filter(Species == "versicolor") %>% select(var) %>%  and iris %>% filter(Species == "virginica") %>% select(var) %>% pull()    pull() and iris %>% filter(Species == "virginica") %>% select(var) %>% pull()
    W = 526, p-value = 5.869e-07
    alternative hypothesis: true location shift is not equal to 0
    

    如果不使用引号,则会出现“object not found”错误。

    MW_fn(Sepal.Length)
    
    #  Error: object 'Sepal.Length' not found
    

    【讨论】:

    • 天啊,我想我已经尝试了所有可能的引号组合,除了那个!谢谢!!
    猜你喜欢
    • 2019-03-04
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多