我在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])))
消息错误
获取数据后&gt;其他&gt; r脚本和粘贴(所有功能BI环境),我收到以下错误
详细信息:“ADO.NET:R脚本错误。 inputFreq出错(data2016 $ var1 [1:100]): 找不到功能“是” 电话:头 - &gt; as.data.frame - &gt; 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环境中已经表现良好,问题似乎是当电源BI尝试从方法-R读取is()函数时。
答案 0 :(得分:1)
似乎PowerBI使用Rscript.exe,R的命令行版本用于运行没有基于GUI的前端的脚本。 Rscript doesn't load the methods package,这是定义is
函数的地方。
要解决此问题,请执行以下操作之一:
library(methods)
。inherits
代替is
。 This does almost exactly the same thing,但在base
包中定义,因此始终可用。