Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过R中的变量引用列名_R - Fatal编程技术网

通过R中的变量引用列名

通过R中的变量引用列名,r,R,我想知道为什么下面的例子2不起作用,当然还有可能的解决方案:p test <- data.frame('a'=1:5,'b'=6:10) #Example 1: '$'(get('test'),'b') #Example 2: columnname = 'b' '$'(get('test'),columnname) 把美元换成[[ 以下是一个例子: '[['(get('test'),columnname) 这个想法是通过使用$R期望索引是一个直接值或一个不需要求值的符号,即不是一个变

我想知道为什么下面的例子2不起作用,当然还有可能的解决方案:p

test <- data.frame('a'=1:5,'b'=6:10)
#Example 1:
'$'(get('test'),'b')

#Example 2:
columnname = 'b'
'$'(get('test'),columnname)
把美元换成[[

以下是一个例子:

'[['(get('test'),columnname)
这个想法是通过使用$R期望索引是一个直接值或一个不需要求值的符号,即不是一个变量,因为$R不求值它的第二个参数。我认为这一事实在帮助页面中有明确的说明,但在查看它之后,我不太确定我是否能够做出这样的声明。帮助页面中的相关句子e是:

主要区别在于,$不允许计算索引,而[[允许]

正如iTech所指出的,[[和$之间的一个关键区别是,$需要一个字符向量作为其第二个参数,而[[能够接受一个字符向量或要计算的对象名。另一个区别是,$只接受递归对象作为其第一个参数

在寻找之前解决此问题的时间时,我发现了另一个解决方案,该解决方案仅用于学习语言,而不用于您的编码策略:

columnname = 'b'
do.call(  '$', list(get('test'), columnname))
[1]  6  7  8  9 10

这确实为评估第二个参数和第一个参数提供了另一种机制,但在我看来,这就像是一段折磨人的代码。您应该在列表中收集要处理的项目,并使用[[或]使用lappy或sapply遍历它们[作为有趣的适当论据。

如果您在问题中花些时间解释为什么要这样做,您将在这里避免很多评论,可能会承认这主要是为了理解$,而不是您实际上试图以这种方式使用$。@joran可能只是一种练习,就像我的Try test[[columname]],如果这回答了你真正的问题,就指出它。@Frank我希望如此,但如果OP没有进一步解释,他们很可能会得到很多关于just use的回答[[,这可能不是他们想要的。@joran-我猜这是因为他们要求潜在的解决方案。要理解$为什么会这样,请看一下:test$b和test$b。消息来源说…我们需要确保只计算第一个参数。第二个参数是需要匹配的符号,而不是计算的符号。另一个重复的我忘了: