Хотя ваш код может быть синтаксически правильным, он не имеет особого смысла с семантической точки зрения.
Вот некоторые комментарии / советы:
medianA <- data.frame("median")
создает data.frame
с одной character
записью "median"
в одном столбце. Я не знаю, в чем смысл этого.
- Затем вы переопределяете эту переменную (делая предыдущее определение устаревшим) как
median <- median(a)
из (что я предполагаю как a) numeric
вектор a
, который передается как аргумент функции; это возвращает скаляр, то есть одно число.
- В последней строке кода вы вычисляете
median(medianA)
и mean(medianA)
, что не имеет смысла, поскольку medianA
является скаляром (не вектором); чтобы сделать это явно: то, что вы здесь вычисляете, это median(4)
и mean(4)
, которые в обоих случаях будут тривиально возвращать 4
.
- Наконец, я призываю вас использовать правильный отступ / интервал и ознакомиться с тем, как писать пользовательские функции в R; например, функции R могут использовать неявные возвращаемые значения в качестве последнего вычисленного выражения функции; или вы можете использовать явный возвращаемый аргумент как
return(expression)
. В любом случае, ничего после return(...)
не будет оценено.
Итак, если вы хотите определить функцию, которая печатает (и возвращает) median
и mean
вектора numeric
, вы можете написать что-то вроде
printVecInfo <- function(x) {
cat(sprintf("Mean of x: %f\n", mean(x)))
cat(sprintf("Median of x: %f\n", median(x)))
return(list(mean = mean(x), median = median(x)))
}
printVecInfo(1:5)
#Mean of x: 3.000000
#Median of x: 3.000000
#$mean
#[1] 3
#
#$median
#[1] 3