【问题标题】:Get value of list by name attribute in R在R中按名称属性获取列表的值
【发布时间】:2012-09-24 23:52:14
【问题描述】:
contrast=list("1"="profit")
input=readline("please input")
please input1
input
[1] "1"
class(input)
[1] "character"
contrast[[input]]
[1] "profit"
contrast$"1"
[1] "profit"
contrast$input
NULL

为什么contrast$input 不等于contrast$"1"
输入的值为“1”,类也是字符。

eval(input)
[1] "1"
contrast$(eval(input))
Error: unexpected '(' in "contrast$("
contrast$eval(input)
Error: attempt to apply non-function
eval(paste(input))
[1] "1"
class(eval(paste(input)))
[1] "character"
contrast$eval(paste(input))
Error: attempt to apply non-function
contrast$(eval(paste(input)))
Error: unexpected '(' in "contrast$("

有没有办法通过 contrast$input 获取值?

【问题讨论】:

  • 来自文档:“[[ 和 $ 都选择列表的单个元素。主要区别在于 $ 不允许计算索引,而 [[ 允许。x$name 相当于 x [[“名称”,确切 = FALSE]]“
  • 你的意思是我永远无法通过 contrast$input 获得价值?
  • @FfYy 就像 joran 提到的那样——你就是做不到。但是,当完美的替代品contrast[[input]] 可用时,您为什么要这样做呢?
  • @joran,发表您的第一条评论作为答案...? (我确定那里有重复或非常接近的重复,但现在懒得去寻找它们......)如果我尝试搜索 [r] "[[" "$",StackOverflow 不喜欢它跨度>

标签: r


【解决方案1】:

这是不可能的。来自文档(?Extract):

"[[ 和 $ 都选择列表的单个元素。主 区别在于 $ 不允许计算索引,而 [[ 允许。 x$name 等价于 x[["name", exact = FALSE]]"

一般来说,$ 用于交互使用,但对于编程(脚本、函数等),您应该使用[[

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    相关资源
    最近更新 更多