Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R包未加载“导入”包_R_Dplyr_R Package_Roxygen2_Magrittr - Fatal编程技术网

R包未加载“导入”包

R包未加载“导入”包,r,dplyr,r-package,roxygen2,magrittr,R,Dplyr,R Package,Roxygen2,Magrittr,我正在开发一个包,它的功能依赖于许多其他包中的dplyr。正如H.Wickham在他的R软件包书中所建议的那样,我将所有必要的软件包都包含在导入的描述文件中 Imports: apaTables, data.table, dplyr, magrittr, plyr, rlang, sjstats, stats 然后在函数体中使用namespace(这里不需要函数的细节;我想强调的是,我使用的是Hadley在其书中推荐的packagename::fun()格式):

我正在开发一个包,它的功能依赖于许多其他包中的
dplyr
。正如H.Wickham在他的R软件包书中所建议的那样,我将所有必要的软件包都包含在
导入
描述
文件中

Imports:
  apaTables,
  data.table,
  dplyr,
  magrittr,
  plyr,
  rlang,
  sjstats,
  stats
然后在函数体中使用
namespace
(这里不需要函数的细节;我想强调的是,我使用的是Hadley在其书中推荐的
packagename::fun()
格式):

我做错了什么

如果你需要更多的细节, GitHub存储库: 有关职能:
描述文件:

总结结束时,这里有几个问题:

  • 使用
    packagename::fun()
    是一个不错的选择,但对操作员来说效果不好。尤其是对于管道(
    %%>%%
    ),使用例如函数来代替会破坏它的用途

  • @importFrom
    标记优于
    @import
    ,因为这更为狭窄和明确。调用
    roxygen2::roxygenize()
    时,这两项都会影响命名空间文件。但是请注意,roxygen不会干扰用户定义的命名空间文件,因为通常情况下,人们宁愿自己手动处理(例如,当包提供S3类和/或方法时),然后需要撤消roxygen的覆盖。删除现有名称空间文件将允许roxygen重新创建它。Roxygen通常会在名称空间文件中添加一行,以识别是否应更新该文件:

    #由roxygen2生成:请勿手动编辑

  • 描述文件中的依赖项既没有被roxygen修改,也没有被roxygen添加到名称空间中(请注意,这将导致完整的包导入,我们宁愿通过
    @importFrom
    来避免)。需要手动处理描述文件,确保导入:部分涵盖通过命名空间使用的所有包,即通过
    @import
    @importFrom
    ,以及通过
    packagename::fun()


您没有导入管道操作符
%%>%
。我建议为这个特定的应用程序添加@importFrom标记case@RolandASc将
magrittr
添加到
Description
文件中的
Imports
,不应该自动解决这个问题吗?无论如何,我确实向函数添加了
#'@importFrom magrittr%>%
调用,但仍然得到相同的错误。只有在调用
库(dplyr)
时,错误才会消失,但对于包中的R脚本中的函数来说,这是一个很大的禁忌。所以我不确定该怎么做才能消除这个错误。Roxygen与描述文件没有太多交互。要将导入导入到名称空间中,需要将它们放在标记中的某个位置。添加“导入自”后是否重新运行了“roxygenize()”?请注意,“dplyr”中也存在管道,因此,如果这是您从“magrittr”中想要的,您甚至可以丢弃该包装,嗯,我不知道!好的,现在发生的事情如下:如果我在
Rstudio
roxygenize()
中打开有问题的R包项目,该函数就会工作。但是,如果我退出并重新进入项目,然后使用包中的函数而不首先运行
roxygenize()
,则会再次出现相同的错误。我猜我缺少了一些关于
roxygen2
应该如何在包环境中运行的关键功能。结果证明这就是问题所在:默认情况下创建的命名空间文件不包含由
roxygen2
创建的任何内容,需要删除并重新创建。不知道为什么会这样,但当我这样做的时候,事情又开始起作用了。
#'
#' @title Confidence intervals for Partial Eta Squared
#' @name partialeta_sq_ci
#' @author Indrajeet Patil
#'
#' @param lm_object stats::lm linear model object
#' @param conf.level Level of confidence for the confidence interval
#' @importFrom magrittr %>%
#' @export

partialeta_sq_ci <- function(lm_object, conf.level = 0.95) {
  # get the linear model object and turn it into a matrix and turn row names into a variable called "effect"
  # compute partial eta-squared for each effect
  # add additional columns containing data and formula that was used to create these effects

  x <-
    dplyr::left_join(
      # details from the anova results
      x = data.table::setDT(x = as.data.frame(as.matrix(
        stats::anova(object = lm_object)
      )),
      keep.rownames = "effect"),
      # other information about the results (data and formula used, etc.)
      y = data.table::setDT(x = as.data.frame(
        cbind(
          "effsize" = sjstats::eta_sq(
            model = stats::anova(object = lm_object),
            partial = TRUE
          ),
          "data" = as.character(lm_object$call[3]),
          "formula" = as.character(lm_object$call[2])
        )
      ),
      keep.rownames = "effect"),
      # merge the two preceding pieces of information by the common element of Effect
      by = "effect"
    )
  # create a new column for residual degrees of freedom
  x$df2 <- x$Df[x$effect == "Residuals"]
  # remove sum of squares columns since they will not be useful
  x <-
    x %>%
    dplyr::select(.data = .,
                  -c(base::grep(pattern = "Sq", x = names(x))))
  # remove NAs, which would remove the row containing Residuals (redundant at this point)
  x <- na.omit(x)
  # rename to something more meaningful and tidy
  x <- plyr::rename(x = x,
                    replace = c("Df" = "df1",
                                "F value" = "F.value"))
  # rearrange the columns
  x <-
    x[, c("F.value",
          "df1",
          "df2",
          "effect",
          "effsize",
          "Pr(>F)",
          "data",
          "formula")]
  # convert the effect into a factor
  x$effect <- as.factor(x$effect)
  # for each type of effect, compute partial eta-squared confidence intervals, which would return a list
  ci_df <-
    plyr::dlply(
      .data = x,
      .variables = .(effect),
      .fun = function(data)
        apaTables::get.ci.partial.eta.squared(
          F.value = data$F.value,
          df1 = data$df1,
          df2 = data$df2,
          conf.level = conf.level
        )
    )
  # get elements from the effect size confidence intervals list into a neat dataframe
  ci_df <-
    plyr::ldply(
      .data = ci_df,
      .fun = function(x)
        cbind("LL" = x[[1]],
              "UL" = x[[2]])
    )
  # merge the dataframe containing effect sizes with the dataframe containing rest of the information
  effsize_ci <- base::merge(x = x,
                            y = ci_df,
                            by = "effect")
  # returning the final dataframe
  return(effsize_ci)

}
Error in x %>% dplyr::select(.data = ., -c(base::grep(pattern = "Sq",  : 
  could not find function "%>%"