2012-11-19 11 views
5

Mam problem z użyciem cudzysłowów podczas formatowania ciągi tekstowe wysyłane do funkcji w R.Wyślij tekst zawierający podwójne cudzysłowy funkcjonować

Rozważmy przykład kodu funkcję:

foo <- function(numarg = 5, textarg = "** Default text **"){ 
    print (textarg) 
    val <- numarg^2 + numarg 
    return(val) 
} 

podczas pracy z następującego kodu:

foo(4, "Learning R is fun!") 

wyjście jest:

[1] "Learning R is fun!" 
[1] 20 

Ale gdy próbuję (na różne sposoby, jak sugeruje here) napisać „R” zamiast R, otrzymuję następujące wyjścia:

> foo(4, "Learning R is fun!") 
[1] "Learning R is fun!" 
[1] 20 
> foo(4, "Learning "R" is fun!") 
Error: unexpected symbol in "funfun(4, "Learning "R" 
> foo(4, "Learning \"R\" is fun!") 
[1] "Learning \"R\" is fun!" 
[1] 20 
> foo(4, 'Learning "R" is fun!') 
[1] "Learning \"R\" is fun!" 
[1] 20 

Korzystanie as.character(...) lub dQuote(...) jak sugeruje here wydaje się złamać funkcja z powodu różnej liczby argumentów.

Odpowiedz

1

Można spróbować tych podejść:

foo <- function(numarg = 5, textarg = "** Default text **"){ 
    cat(c(textarg, "\n")) 
    val <- (numarg^2) + numarg 
    return(val) 
} 

foo <- function(numarg = 5, textarg = "** Default text **"){ 
    print(noquote(textarg)) 
    val <- (numarg^2) + numarg 
    return(val) 
} 

foo(4, "Learning R is fun!") 
foo(4, 'Learning "R" is fun!') 
+0

Dzięki! Oboje działają! Zauważyłem, że mogę użyć tylko 'cat (textarg," \ n ") zamiast formatowania wyjścia jako tablicy używając' cat (c (textarg, "\ n") '. Który jest preferowany? – Khaloymes

5

Dwa sposoby, które znam. Pierwszym z nich jest po prostu użyć apostrofów aby rozpocząć i zakończyć ciąg znaków:

> cat('Learning "R" is fun!') 
Learning "R" is fun! 

drugie jest ucieczka podwójnych cudzysłowach:

> cat("Learning \"R\" is fun!") 
Learning "R" is fun! 

Zauważ, że to działa, ponieważ używam cat, który jest przeznaczony do ciągi wyjściowe do konsoli. Wydaje się użyć print() który przedstawia obiekt zamiast wyjścia to

+2

Kiedy próbuję użyć 'cat' podczas wysyłania tekstu do funkcji, tekst jest prawidłowo sformatowany (przy użyciu dowolne z twoich sugestii), tylko tym razem, wyprowadza "Uczenie się" R "jest zabawne! NULL' zamiast" Uczenia się "R" jest zabawne! '. Każdy pomysł, jak zakończyć ten dodatek "NULL"? (A co ważniejsze, każdy pomysł skąd się wziął?) – Khaloymes

Powiązane problemy