如果我用我的資料運行這段代碼,我會得到我應該有的輸出
my_mean <- function(simulated_data){
if(is.numeric(simulated_data)){
return(sum(simulated_data)/length(simulated_data))
}else{
return('Non-numeric data')
}
}
for (i in colnames(simulated_data)){
cat(paste(colnames(simulated_data[i]), "Mean:", my_mean(simulated_data[[i]]), "\n"))
}
這是輸出:
total_cost Mean: 1897.21529700626
product_line Mean: Non-numeric data
day Mean: Non-numeric data
calander_week Mean: 25.5
quantity Mean: 113.759646705788
但是如果概括了公式(因為我必須為我的作業做),我運行以下代碼:
means_function <- function(input_data){
for(i in colnames(input_data)){
if(is.numeric(input_data)){
cat(paste(colnames(input_data[i]), "Mean:", mean(input_data[i]),"\n"))
}else{
cat(paste(colnames(input_data[i]), "Mean:", 'Non-numeric data', "\n"))
}
}
}
means_function(simulated_data)
然后我得到以下輸出:
total_cost Mean: Non-numeric data
product_line Mean: Non-numeric data
day Mean: Non-numeric data
calander_week Mean: Non-numeric data
quantity Mean: Non-numeric data
有人可以告訴我我做錯了什么嗎?我必須使用for回圈、if函式和means函式
uj5u.com熱心網友回復:
你快到了,這是我在這個例子中使用的資料框
df <- data.frame(movieID = c("A","A","A","B","B","C","C","C"),
crewID = c("Z","Y","X","Z","V","V","X","Y"),
Rating = c(7.3,7.3,7.3,2.1,2.1,9,9,9))
您在列名中為 i (一個數字)所說的 for 回圈沒有多大意義。
means_function <- function(input_data){
for(i in 1:ncol(input_data)){
if(is.numeric(input_data[[i]])){
cat(paste(colnames(input_data[i]), "Mean:", mean(input_data[[i]]),"\n"))
}else{
cat(paste(colnames(input_data[i]), "Mean:", 'Non-numeric data', "\n"))
}
}
}
稱呼:
means_function(df)
輸出:
movieID Mean: Non-numeric data
crewID Mean: Non-numeric data
Rating Mean: 6.6375
uj5u.com熱心網友回復:
至于 for 回圈遍歷每個實體并執行函式。所以在下面的情況下
my_mean <- function(simulated_data){
if(is.numeric(simulated_data)){
return(sum(simulated_data)/length(simulated_data))
}else{
return('Non-numeric data')
}
}
for (i in colnames(simulated_data)){
cat(paste(colnames(simulated_data[i]), "Mean:", my_mean(simulated_data[[i]]), "\n"))
}
my_mean 函式應用于向量(simulated_data[[i]] 回傳向量),而將相同的函式應用于 data.frame 的泛化不能根據您的需要作業。
不作業的原因是在 if 陳述句中,它實際上檢查了一個 data.frame 并最終將 is.numeric(input_data) 的輸出回傳為 FALSE
means_function <- function(input_data){
for(i in colnames(input_data)){
if(is.numeric(input_data)){
cat(paste(colnames(input_data[i]), "Mean:", mean(input_data[i]),"\n"))
}else{
cat(paste(colnames(input_data[i]), "Mean:", 'Non-numeric data', "\n"))
}
}
}
means_function(simulated_data)
為了克服這個問題,您可以修改means_function,如下所示,它檢查向量并計算向量的均值而不是data.frame:
means_function <- function(input_data){
for(i in colnames(input_data)){
if(is.numeric(input_data[, i])){
cat(paste(colnames(input_data[i]), "Mean:", mean(input_data[, i]),"\n"))
}else{
cat(paste(colnames(input_data[i]), "Mean:", 'Non-numeric data', "\n"))
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/362946.html
上一篇:從List中的任何地方洗掉某個值的元素的最有效方法?C#
下一篇:JS回圈遍歷陣列并用地圖分組
