2013-03-15 55 views
1

我有一个数据帧中的行名的话使用一个变量,我可以使用的东西调用数据德拉梅的该行的第一列样的R - 如何在一个变量

>df['rowB',1] 

我知道我可以用浆糊粘贴使用像做

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

一个变量和一个字符串相结合,这将让我的字符串的输出与变量的值。如果rowname是一个等于'rowB'的变量呢?我试图做的第一贴把上面的贴,但是先粘贴的结果不evaulate的值,而只是一个字符串,说

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

长话短说,我想要输入一个名为'rowname'的值作为函数的参数,并对rowname的值进行评估,然后我可以将该值放入同一个函数中的一个字符串中。

我也开放给一个完全不同的解决方案。任何和所有的建议是受欢迎的。

感谢

+1

我想你只需要去除周围'rowname'引号, 'rowname'是一个变量... – adibender 2013-03-15 23:50:29

+0

我做了一些编辑来澄清我的意思。 – user1714887 2013-03-16 00:08:24

回答

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" 
1

这应该工作:

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

如果你不熟悉, '得到' 的r是类似蟒蛇 'EVAL'。

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

这似乎很接近,但不完全正确,因为只使用不带get函数的粘贴将获得变量df ['rowB',1]的值。我澄清了我最初的问题,让我想要更清楚一点。 – user1714887 2013-03-16 00:07:53

+0

@ user1714887,只需尝试'paste(“value is”,df [rowname,1],“。”)'就像@adibender建议的那样。 – flodel 2013-03-16 00:11:21

+0

ho-ly牛!这是正确的。我如何将@adibender标记为正确答案?我想我过分庞大了。 – user1714887 2013-03-16 00:13:59

1

恐怕我不明白这个问题;你的功能如何与以下不同?

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

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

} 

foo() 
# [1] "I'm selecting setosa" 
相关问题