2012-04-24 43 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" 
相关问题