这可能很简单,但我是R的新手,它并不像GrAD那样工作,所以我一直在寻找高低的例子,但无济于事。
我有两组数据。数据A(1997)和数据B(2000)
数据A有35个标题(苹果,橙子,葡萄等)。 200观察。
数据B有35个标题(苹果,橙子,葡萄等)。 200次观察。
两个数据集之间的唯一区别是年份。
所以我想将这两个数据集关联起来,即Apples(1997)下的200个数据与Apples(2000)下的200个数据相关联。所以1个标题应该只给我1个值。
我已将所有标题名称转换为V1,V2,V3 ......
所以现在我需要这样做:
x<-1
while(x<35) {
new(x)=cor(1997$V(x),2000$V(x))
print(new(x))
}
然后我收到此错误:
pptn26 $ V(x)中的错误:尝试应用非功能。
任何建议都非常感谢!
答案 0 :(得分:1)
您的错误直接来自使用括号,其中R不期望它们。如果执行1(x)
,您将收到相同类型的错误。 1
不是一个函数,所以如果你把它放在括号旁边而且之间没有空格,你就会尝试应用非函数。
我还有点惊讶于你在遇到其他几个问题之前如何设法一直处理这个错误,但我想这与R评估什么时有关...
以下是如何获得您正在寻找的行为:
mapply(cor, A, B)
# provided A is the name of your 1997 data frame and B the 2000
以下是模拟数据的示例:
set.seed(123)
A <- data.frame(x = 1:10, y = sample(10), z = rnorm(10))
B <- data.frame(x = 4:13, y = sample(10), z = rnorm(10))
mapply(cor, A, B)
# x y z
# 1.0000000 0.1393939 -0.2402058
在其典型用法中,mapply
采用n-ary函数和n个为该函数提供n个参数的对象。这里的n元函数是cor
,对象是A
和B
,每个都是一个数据框。数据帧被构造为矢量列表,即数据帧的列。因此,mapply
将为您循环播放列,对cor
进行35次调用,每次调用A
和B
的下一列。
如果您已设法弄清楚如何为数据框命名1997
和2000
,那就值得称道。这样做并不容易。这也会让你头疼。您希望为数据框提供语法上有效的名称。这意味着他们应该以一个字母(或一个点,但真的是一个字母)开头。有关详细信息,请参阅the R FAQ。