【问题标题】:power BI cannot find function is() in a R scriptPower BI 在 R 脚本中找不到函数 is()
【发布时间】:2016-11-15 11:52:17
【问题描述】:

亲爱的

我在 Power BI 中运行以下 R 脚本,目的是获取“data2016”和“df”作为输出数据(两者都是数据帧)。使用 sapply() 我正在采购函数 inputFreq(),这是一个自制函数,用于计算向量中条目的频率。该函数在内部使用 is()(除其他外,请参阅下面的详细信息)

setwd("C:/Users/Home/Documents/folder")
data2016 <- read.csv("rawData2016.csv", header = TRUE)
sapply(list.files(pattern="[.]r$", full.names=TRUE), FUN=source)
df <- head(as.data.frame(inputFreq(data2016$var1[1:100])))

消息错误

在执行 Get Data > Other > r script 并粘贴(全部在 power BI 环境中)后,我收到以下错误

详细信息:“ADO.NET:R 脚本错误。 inputFreq(data2016$var1[1:100]) 中的错误: 找不到功能“是” 调用:head -> as.data.frame -> inputFreq 执行停止

调用的函数 inputFreq() 内部有 is() 函数。有关信息,这是函数:

inputFreq <- function(x){

  if( is(x, "factor") == TRUE ) {
    x <- as.character(x)
  } else {
    x
  }

  a <- sort(x)
  n <- length(a)
  k <- numeric(n)
  f <- numeric(n)

  # vector k: algoritmo para computar la frecuencia maxima en vector 'a'

  k[1] <- 1
  for (i in 2:n){
    if ( a[i]==a[i-1] ){
      k[i] <- 1 + k[i-1]
    }  else {
      k[i] <- 1
    }

  }

  # vector N: algoritmo para imputar la frecuencia maxima de cada a(i)

  f[n] <- k[n]
  for (j in (n-1):1){
    if ( k[j] < k[j+1] ){
      f[j] <- f[j+1]
    }  else {
      f[j] <- k[j]
    }
  }

  return( cbind( "x" = x, "fr.x" = f[match(x,sort(x))] ) )
}

更多信息

该函数在rstudio环境中已经表现良好,问题似乎出在power BI试图从methods-R中读取is()函数时。

有什么建议吗?非常感谢!

【问题讨论】:

  • 你试过is.factor()这个功能吗?
  • is 在方法包中。也许 Power BI 不加载它?您可以使用methods::is 指定命名空间
  • library(methods)

标签: r powerbi


【解决方案1】:

PowerBI 似乎使用 Rscript.exe,这是 R 的命令行版本,用于在没有基于 GUI 的前端的情况下运行脚本。 Rscript doesn't load the methods package,这是定义is函数的地方。

要解决此问题,请执行以下操作之一:

【讨论】:

    猜你喜欢
    • 2021-05-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多