r - 如何在变量中使用变量

时间:2013-03-15 23:28:28

标签: r variables concatenation

我有一个数据框,其中行名称是单词,我可以使用类似

之类的内容调用该行数据drame的第一列
>df['rowB',1]

我知道我可以使用粘贴将变量和字符串组合使用粘贴来执行类似

的操作
>paste("the value is ", df['rowB',1], "."]

这将获得带有变量值的字符串输出。如果rowname是一个等于'rowB的变量怎么办?我尝试先将粘贴放入上面的粘贴中,但是第一次粘贴的结果并没有考虑到值,而是只是一个字符串,表示

>rowname<-'rowB'
>type<-paste("relatype[\'", rowname, "\',1]", sep="")
'df['rowB',1]'

长话短说,我想输入一个名为'rowname'的值作为函数的参数,并让它被评估为rowname的值,所以我可以将该值放入同一函数中的字符串中。 / p>

我也对完全不同的解决方案持开放态度。欢迎提出任何建议。

感谢

3 个答案:

答案 0 :(得分:1)

这应该有效:

paste("the value is ", get(df['rowname',1]), "."]

如果你不熟悉,r中的'get'类似于python中的'eval'。

x=c('a', 'c', 'b')
a=2
x[1]
'a'
get(x[1])
2

答案 1 :(得分:1)

我害怕我不理解这个问题;你的功能与以下内容有何不同?

foo = function(rowname = "Species", d = t(iris)){

  paste("I'm selecting", d[rowname, 1])

}

foo()
# [1] "I'm selecting setosa"

答案 2 :(得分:1)

不确定问题可能是什么,并不完全清楚你的描述,但如果rowname是一个变量,你不需要任何特殊的东西,因为它无论如何都会评估它的价值。让

mat <- matrix(1:10, nrow = 5)
rownames(mat) <- letters[1:5]
mat
##   [,1] [,2]
##a    1    6
##b    2    7
##c    3    8
##d    4    9
##e    5   10

rowname <- "b",然后

rowname
##[1] "b"

所以

mat[rowname, 1]
##b 
##2 

mat["b", 1]相同。如果您使用mat['rowname', 1],它只会失败。 如果你想把它放在函数中,你可以这样做:

getElement <- function(mat, row.name, column.index) {

    mat[row.name, column.index]

}


getElement(mat, "b", 1)
##b 
##2 

pasteSenstence <- function(mat, row.name, col.index) {

    paste("The element of row", row.name, "and column", col.index, "is", 
            getElement(mat, row.name, col.index))

}
pasteSentence(mat, "b", 1)
##[1] "The element of row b and column 1 is 2"

也适用于rowname <- "b"

 pasteSentence(mat, rowname, 1)
   ##[1] "The element of row b and column 1 is 2"