Ответ с заголовком в той же строке - PullRequest
0 голосов
/ 27 апреля 2019

Написал следующую функцию:

printVecInfo <- function(a)
{
 medianA <- data.frame("median")
  medianA <- median(a)
 return
 cat("Median:",median(medianA),"Mean:", mean(medianA),sep="\n")
}

Когда я запускаю функцию, она отображает ответ, подобный этому, с ответом под заголовком:

Median:
4
Mean:
4

Как мне сделать так, чтобы он отображалсякак это с ответом рядом с названием?

Median: 4
Mean: 4

Ответы [ 2 ]

1 голос
/ 27 апреля 2019

Каждый \n создает новую строку, и сейчас ваша функция добавляет одну между каждой частью с аргументом sep = "\n".

Это должно работать только с одним возвратом:

printVecInfo <- function(a)
{
 cat("Median:",median(a),"\nMean:", mean(a))
}
0 голосов
/ 29 апреля 2019

Хотя ваш код может быть синтаксически правильным, он не имеет особого смысла с семантической точки зрения.

Вот некоторые комментарии / советы:

  1. medianA <- data.frame("median") создает data.frame с одной character записью "median" в одном столбце. Я не знаю, в чем смысл этого.
  2. Затем вы переопределяете эту переменную (делая предыдущее определение устаревшим) как median <- median(a) из (что я предполагаю как a) numeric вектор a, который передается как аргумент функции; это возвращает скаляр, то есть одно число.
  3. В последней строке кода вы вычисляете median(medianA) и mean(medianA), что не имеет смысла, поскольку medianA является скаляром (не вектором); чтобы сделать это явно: то, что вы здесь вычисляете, это median(4) и mean(4), которые в обоих случаях будут тривиально возвращать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...