这是我的代码:
x<-c(1,2)
x
names(x)<- c("bob","ed")
x$ed
Run Code Online (Sandbox Code Playgroud)
为什么我会收到错误:
x<-c(1,2)
x
names(x)<- c("bob","ed")
x$ed
Run Code Online (Sandbox Code Playgroud)
Jil*_*ina 84
从帮助文件中可以看到$(参见参考资料?"$"):
$仅对递归对象有效,并且仅在下面的递归对象部分中讨论.
现在,让我们检查一下是否x是递归的
> is.recursive(x)
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
递归对象具有类似列表的结构.向量不是递归的,而是一个原子对象,让我们检查一下
> is.atomic(x)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
因此,在应用于$向量(非递归对象)时会出现错误,请[改为使用:
> x["ed"]
ed
2
Run Code Online (Sandbox Code Playgroud)
你也可以使用 getElement
> getElement(x, "ed")
[1] 2
Run Code Online (Sandbox Code Playgroud)
Dal*_*pus 37
你得到这个错误的原因是你有一个vector.
如果要使用$运算符,只需将其转换为data.frame.但由于在这种特殊情况下你只有一行,你还需要转置它; 否则bob,ed将成为您的行名而不是您的列名,这是我认为您想要的.
x <- c(1, 2)
x
names(x) <- c("bob", "ed")
x <- as.data.frame(t(x))
x$ed
[1] 2
Run Code Online (Sandbox Code Playgroud)
tmp*_*345 12
因为$不适用于原子矢量.使用[或[[代替.从帮助文件$:
对于原子向量,矩阵/数组以及递归(类似列表,请参阅is.recursive)对象,默认方法的工作方式略有不同.$仅对递归对象有效,并且仅在下面的递归对象部分中讨论.
x[["ed"]] 将工作.
这里x是一个向量。您需要将其转换为数据帧才能使用 $ 运算符。
x <- as.data.frame(x)
Run Code Online (Sandbox Code Playgroud)
会为你工作。
x<-c(1,2)
names(x)<- c("bob","ed")
x <- as.data.frame(x)
Run Code Online (Sandbox Code Playgroud)
将为您提供 x 的输出为:
bob 1
ed 2
并且,将为您提供 x$ed 的输出为:
NULL
如果您希望 bob 和 ed 作为列名,那么您需要像这样转置数据帧,x <- as.data.frame(t(x))
所以您的代码变成
x<-c(1,2)
x
names(x)<- c("bob","ed")
x$ed
x <- as.data.frame(t(x))
Run Code Online (Sandbox Code Playgroud)
现在 x$ed 的输出是:
[1] 2
| 归档时间: |
|
| 查看次数: |
373182 次 |
| 最近记录: |