我有一个数据框,其中行名称是单词,我可以使用类似
之类的内容调用该行数据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>
我也对完全不同的解决方案持开放态度。欢迎提出任何建议。
感谢
答案 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"