r список заставляет перерабатывать предметы - PullRequest
0 голосов
/ 20 октября 2018

noob question;) как заставить список перезаписать условие в функции?когда я запускаю

mylist <- list(a = 3, b = c(2,8), c = c(1,4))
sumit<-function(v){x<-v$a + v$b + v$c}
x<-sumit(mylist)

, он, конечно, правильно возвращает 6 и 15 (переработка mylist $ a).Но если я хочу запустить

sumit<-function(v){
  x<-v$a + v$b + v$c
  if (v$c ==1) x<-x*100
  }
x<-sumit(mylist)

Он не хочет перезапускать условие и использует для обоих случаев mylist$c = 1, что приводит к 600 и 1500 вместо 600 и 15

Как вы заставляетеэто перерабатывать аргументы?Я видел функцию recycle из библиотеки rebus, но она конфликтует с несколькими другими пакетами, которые я использую, и я не хочу перемещать $c к аргументам, так как я не знаю в процессе, какой элемент списка будет иметь какую длину - иногда cможет иметь 3 значения, иногда b и т. д.

И я не хочу, чтобы он разбивался на sumit (a, b, c), разделяя список на 3 вектора

1 Ответ

0 голосов
/ 20 октября 2018

Требуется ifelse:

mylist <- list(a = 3, b = c(2,8), c = c(1,4))
sumit<-function(v){x<-v$a + v$b + v$c}
x<-sumit(mylist)

sumit<-function(v){
  x<-v$a + v$b + v$c
  x <- ifelse (v$c ==1, x*100,x)
}
x<-sumit(mylist)
x
# [1]  600 15

if работает с логической одинарной длиной и в первом случае принимает первый элемент, ifelse работает с векторами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...