2012-04-24 73 views
1

我對R有兩個問題。這裏有一些非常簡單的問題,但不幸的是,我在網上找不到任何東西。在R中打印字符串和函數的參數

  1. 是否可以寫爲r的功能,fun1<-function(place)這樣的說法「地方」是,我想在我的情況要導入的文件名,即

    fun1 <- function(place) 
    data <- read.table(/home/place.csv, header=TRUE, sep=",") 
    
  2. 假設變量c被分配給一個數字,例如一個人的年齡。然後我想打印出如下這樣的字符串:"hello my age is c"。你如何在R中做到這一點?

+2

見''paste''cat' message' – Aaron 2012-04-24 18:50:02

+0

我爲什麼要使用的功能的原因是:我必須做一些計算/對大量的文件操作(全的.csv)。首先我選擇'file.choose()'。我使用Emacs,但是我必須每次都寫這樣的東西:/home/dir1/dir2/filename.csv。所以我的想法是使用一個函數,其中參數是文件名。假設我必須對200個文件進行這種計算,我猜這個函數方法更有效率,不是嗎? – math 2012-04-25 08:24:49

回答

6
  1. 您可以使用sprintfpaste0等的第一部分。不需要

    fun1 <- function(place) read.table(sprintf('/home/%s.csv', place), 
                header=TRUE, sep=",") 
    
    fun2 <- function(place) read.table(paste0('/home/', place, '.csv'), 
                header=TRUE, sep=",") 
    # paste0 only works in recent versions of R 
    
    fun3 <- function(place) read.table(paste('/home/', place, '.csv', sep=''), 
                header=TRUE, sep=",") 
    
    # Now call the functions 
    fun1('test.csv') 
    fun2('test.csv') 
    fun3('test.csv') 
    
  2. sapply因爲paste被量化。 ???

    ages <- 10:20 
    paste('Hello my name is', ages) 
    
+0

@ Erik Shilts:謝謝你的回答。然而,第一部分不適合我。假設我的文件在'/ home/dir1/dir2 /'中。此外,假設有一個名爲test.csv的文件(完整路徑是:/home/dir1/dir2/test.csv)。如果我寫'fun1 <-function(place)read.table(sprintf('/ home/dir1/dir2 /%s.csv',place),header = TRUE,spe =「,」)'那麼我得到錯誤:當我調用'fun1(test)'時,找不到對象test.csv。我的代碼有什麼問題?另外'%s'是什麼?非常感謝您的幫助。 – math 2012-04-25 08:29:53

+0

結賬'?sprintf'獲取該功能的幫助。它的作用是允許你在一個字符串中指定持有者的位置。嘗試運行'sprintf(「Place1 [%s],Place2 [%s],Place3 [%s]」,'thing1','thing2','thing3')'看看它是如何工作的。你的錯誤表明R正在尋找名爲test.csv的對象。相反,您應該將字符串'test.csv'傳遞給該函數。 – 2012-04-25 14:45:49

+0

@ Erik Shilts:對不起,如果我的評論不清楚,或者我誤解了你的評論。我做了什麼:我寫了一個R-script,其中包含上述函數fun1。我用'source(R-script的名字)'加載它。然後,我嘗試了fun1(測試)並獲得了前面評論中提到的錯誤。我也嘗試了fun1(test.csv),結果相同。 – math 2012-04-25 18:26:57

2

我不確定你想要在問題的第一部分實現什麼。你能解釋一下嗎?

對於第二部分,關於這樣的事情是什麼:

> ages = c(40, 23, 13, 42, 53) 
> sapply(ages, function(x) paste("Hello, my age is", x)) 
[1] "Hello, my age is 40" "Hello, my age is 23" "Hello, my age is 13" "Hello, my age is 42" 
[5] "Hello, my age is 53" 
相關問題