1

我有一个数据框,其中行名是单词,我可以使用类似的方法调用该数据行的第一列

>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 的值对其进行评估,这样我就可以将该值放入同一个函数中的字符串中。

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

谢谢

4

3 回答 3

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
于 2013-03-15T23:49:53.533 回答
1

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

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

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

}

foo()
# [1] "I'm selecting setosa"
于 2013-03-16T00:14:01.693 回答
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"
于 2013-03-16T00:15:46.543 回答