我创建的R函数不能按预期工作

beq87vna  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(142)

最小可重现数据

set.seed(2023)
pid <- 1:30
y1 <- rnorm(30, 10, 10)
y2 <- rnorm(30, 10, 10)
x1 <- rnorm(30, 5, 2)
x2 <- rnorm(30, 5, 2)
x3 <- rnorm(30, 300, 3)

data <- data.frame(pid, y1, y2, x1, x2, x3)

我想做一个函数

sumTogether <- function(data=data, 
                      first_IV, 
                      second_IV, 
                      third_IV=NULL, 
                      first_DV, 
                      second_DV
) {
  require(tidyverse)
  if (is.null(third_IV)) {
    data <- data %>%
      mutate(IVsum=first_IV + second_IV, 
             DVsum=first_DV + second_DV)
    return(data)
  }
  else if(!is.null(third_IV)) {
    data <- data %>%
      mutate(IVsum=first_IV + second_IV + third_IV, 
             DVsum=first_DV + second_DV)
    return(data)
  }
}

我想要的是,如果Thrid_IV为空,我可以得到IVsum作为第一IV +第二IV,如果Third_IV不为空,我可以得到IVsum作为第一IV+第二IV+第三IV。

head <- sumTogether(data=data, first_IV=x1, second_IV=x2, third_IV=x3, first_DV=y1, second_DV=y2)

它不像我想的那样工作,因为x1+ x2 + x3不是Iv和...(错误计算)

cyej8jka

cyej8jka1#

我们必须将third_IV作为NULL传递,否则总是将所有三个IV相加:

head <- sumTogether(data=data, 
                    first_IV=x1, 
                    second_IV=x2, 
                    third_IV=NULL, 
                      first_DV=y1, 
                      second_DV=y2)
pid         y1          y2       x1         x2       x3     IVsum     DVsum
1    1  9.1621564   7.2512294 6.976368  2.2217230 298.5748  9.198091 16.413386
2    2  0.1705625  22.7665407 4.431874  5.8573400 301.1042 10.289214 22.937103
3    3 -8.7506732   1.8901966 1.155465  4.4124372 300.3106  5.567902 -6.860477
4    4  8.1385534   9.5507722 2.652560  9.5599976 301.0390 12.212558 17.689326
5    5  3.6651430   3.6058762 7.088565  2.6709785 297.6949  9.759544  7.271019
6    6 20.9079746   5.6164400 4.734144  7.4817352 303.2974 12.215879 26.524415
7    7  0.8627273  15.0720220 6.689754  2.0098323 297.9165  8.699586 15.934749
8    8 20.0163971  21.2921920 4.256815  4.5367273 299.3882  8.793542 41.308589
9    9  6.0073340  19.7563765 7.095168  3.3502665 299.0107 10.445434 25.763710
10  10  5.3187695   8.7539621 6.850831  2.3516537 303.7522  9.202485 14.072732
11  11 13.2696208  14.2833658 2.042789  5.1580273 299.6379  7.200817 27.552987
12  12  5.8725310  14.1872636 3.154730  4.7815169 307.1944  7.936247 20.059795
13  13 15.6203647  14.3546649 4.830195  6.8110498 301.0592 11.641245 29.975030
14  14 16.6335826   7.9573791 3.266980  6.9507492 302.8548 10.217729 24.590962
15  15  3.9710272  13.0235349 6.350085  6.8861659 299.0527 13.236251 16.994562
16  16 16.9837769  16.9435780 4.838590  4.9660542 303.9466  9.804644 33.927355
17  17 15.9584645  33.7306566 4.748815  3.5568048 294.4836  8.305620 49.689121
18  18 14.5209183  20.7597029 4.223338  5.6010828 301.9047  9.824421 35.280621
19  19 18.9674396  13.3538478 5.033655  3.1937657 299.4585  8.227421 32.321287
20  20 15.7221651  17.5342823 2.747387  7.7753889 301.1416 10.522776 33.256447
21  21  5.8834699  16.6438628 5.436704  6.3397722 299.3096 11.776476 22.527333
22  22  7.0567285  -0.9088266 8.486074  5.0122847 299.5425 13.498358  6.147902
23  23 22.1857396   5.7722915 4.760843  5.5303327 302.0564 10.291176 27.958031
24  24 12.4411143  21.8340204 5.972360  0.8778085 294.7849  6.850168 34.275135
25  25  5.5484804  25.8482679 5.282737  6.5059544 300.0001 11.788691 31.396748
26  26 -8.4780364  32.8085537 5.615935  5.0188463 301.6797 10.634782 24.330517
27  27  3.7117469 -10.6545705 6.988163  2.9903159 301.0985  9.978479 -6.942824
28  28  1.3891931   5.9188803 3.964376 10.1584955 300.4551 14.122872  7.308073
29  29 25.1492030  13.0101457 3.385727  6.4026228 299.6600  9.788350 38.159349
30  30 37.3523893  16.9661308 1.153642  8.7584765 298.4584  9.912119 54.318520

相关问题