在Alteryx中使用R时遇tibble列必须为向量错误求解决
Alteryx中R代码报错:All Columns in a tibble must be vectors.
我在Alteryx中使用R进行统计分析时,运行代码出现如下错误:
! All Columns in a tibble must be vectors.
完整代码如下:
library("tibble") # Calling Data from Connection #1 data <- read.Alteryx("#1") average_wilcox <- c("1","1","1","1","1","1","1") # Creating data frame for in case it comes an empty table df <- data.frame(average_wilcox) #Verify if p-value is empty # In case is different that empty, executes the steps for the Hypothesis Test for non-normal data if (length(data$p.value) == 0) { write.Alteryx(df, 1) } else if (data$p.value != '') { Week1 <- read.Alteryx("#2", mode="data.frame") "&" Week2 <- read.Alteryx("#3", mode="data.frame") # MANN WHITNEY TEST (AVERAGE TEST FOR NON NORMAL) Week1_data <- Week1$Wk1_feature_value Week2_data <- Week2$Wk2_feature_value # DEFINE VECTORS week1 <- c(Week1_data) week2 <- c(Week2_data) merge(cbind(Week1, X=1:length(week1)), cbind(Week2, X=1:length(week2)), all.y =T) [-1] # MANN WHITNEY TEST (MEAN TEST FOR NON NORMAL) average_wilcox <- wilcox.test(week1,week2, alternative='two.sided', conf.level=.95) average_test <- tibble(average_wilcox) average_test[] <- lapply(average_test, as.character) write.Alteryx(average_test, 1) } #### NORMAL HYPOTHESIS TEST #### # Calling Data from Connection #4 data1 <- read.Alteryx("#4") df1 <- data.frame(Date=as.Date(character()),"p.value"=character(),User=character(),stringsAsFactors=FALSE) # Verify if p-value is empty # In case if different than empty, executes the steps for the Hypothesis Test for normal data if(length(data1$p.value) == 0) { write.Alteryx(df1, 3) } else if (data1$p.value != '') { Week1 <- read.Alteryx("#2", mode="data.frame") "&" Week2 <- read.Alteryx("#3", mode="data.frame") # T TEST (MEAN TEST FOR NORMAL) Week1_data <- Week1$Wk1_feature_value Week2_data <- Week2$Wk2_feature_value # DEFINE VECTORS week1 <- c(Week1_data) week2 <- c(Week2_data) # T TEST (MEAN TEST FOR NORMAL) t_test <- t.test(week1,week2, alternative='two.sided',conf.level=.95) write.Alteryx(t_test,3) }
错误原因及解决方法
核心错误点
错误出在average_test <- tibble(average_wilcox)这一行:wilcox.test()返回的是一个列表对象,包含统计量、p值、置信区间等多种结构的数据,而tibble()要求每一列必须是向量,直接将整个列表传入就会触发报错。
同时代码里还有两处无效/冗余内容:
- 单独的
"&"语句无任何实际作用,建议删除; merge(cbind(Week1, X=1:length(week1)), cbind(Week2, X=1:length(week2)), all.y =T) [-1]计算后未赋值给任何变量,属于无效执行,可根据需求删除或保存结果。
修正后的关键代码
1. Wilcoxon检验部分修正
将检验结果提取为单独字段后再构建tibble:
# MANN WHITNEY TEST (MEAN TEST FOR NON NORMAL) average_wilcox <- wilcox.test(week1,week2, alternative='two.sided', conf.level=.95) # 提取测试结果中的关键字段,构建规范的tibble average_test <- tibble( statistic = average_wilcox$statistic, p_value = average_wilcox$p.value, conf_interval_low = average_wilcox$conf.int[1], conf_interval_high = average_wilcox$conf.int[2], alternative_hypothesis = average_wilcox$alternative, test_method = average_wilcox$method, data_source = average_wilcox$data.name ) # 按需转换为字符型 average_test[] <- lapply(average_test, as.character) write.Alteryx(average_test, 1)
2. t检验部分修正
t.test()同样返回列表,直接传入write.Alteryx可能出问题,建议转为数据框后输出:
# T TEST (MEAN TEST FOR NORMAL) t_test <- t.test(week1,week2, alternative='two.sided',conf.level=.95) # 将列表结果转换为数据框 t_test_df <- as.data.frame(unlist(t_test)) colnames(t_test_df) <- "value" write.Alteryx(t_test_df,3)
额外优化建议
data$p.value != ''的判断逻辑有问题:如果p.value是数值型,和空字符串比较会引发类型错误,建议改为!is.na(data$p.value) && length(data$p.value) > 0;week1 <- c(Week1_data)如果Week1_data已经是向量,此行冗余,可直接使用Week1_data。
内容的提问来源于stack exchange,提问作者Wil
相关产品推荐
相关产品推荐

