【发布时间】: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)